Index: libcaca/trunk/cucul/canvas.c
===================================================================
--- libcaca/trunk/cucul/canvas.c	(revision 2304)
+++ libcaca/trunk/cucul/canvas.c	(revision 2305)
@@ -300,5 +300,5 @@
 {
     uint32_t attr = cv->curattr;
-    unsigned int n;
+    int n;
 
     for(n = cv->width * cv->height; n--; )
@@ -394,5 +394,5 @@
     endj = (y + src->height >= dst->height) ? dst->height - y : src->height;
 
-    if((unsigned int)starti > src->width || (unsigned int)startj > src->height
+    if(starti > src->width || startj > src->height
         || starti >= endi || startj >= endj)
         return 0;
@@ -400,6 +400,6 @@
     for(j = startj; j < endj; j++)
     {
-        unsigned int dstix = (j + y) * dst->width + starti + x;
-        unsigned int srcix = j * src->width + starti;
+        int dstix = (j + y) * dst->width + starti + x;
+        int srcix = j * src->width + starti;
         int stride = endi - starti;
 
@@ -408,5 +408,5 @@
             dst->chars[dstix - 1] = ' ';
 
-        if((unsigned int)(endi + x) < dst->width
+        if(endi + x < dst->width
                 && dst->chars[dstix + stride] == CUCUL_MAGIC_FULLWIDTH)
             dst->chars[dstix + stride] = ' ';
@@ -433,6 +433,5 @@
             dst->chars[dstix] = ' ';
 
-        if((unsigned int)endi < src->width
-                && src->chars[endi] == CUCUL_MAGIC_FULLWIDTH)
+        if(endi < src->width && src->chars[endi] == CUCUL_MAGIC_FULLWIDTH)
             dst->chars[dstix + stride - 1] = ' ';
     }
@@ -448,4 +447,5 @@
  *
  *  If an error occurs, -1 is returned and \b errno is set accordingly:
+ *  - \c EINVAL Specified width or height is invalid.
  *  - \c EBUSY The canvas is in use by a display driver and cannot be resized.
  *  - \c ENOMEM Not enough memory for the requested canvas size. If this
@@ -459,13 +459,18 @@
  *  \return 0 in case of success, -1 if an error occurred.
  */
-int cucul_set_canvas_boundaries(cucul_canvas_t *cv, int x, int y,
-                                unsigned int w, unsigned int h)
+int cucul_set_canvas_boundaries(cucul_canvas_t *cv, int x, int y, int w, int h)
 {
     cucul_canvas_t *new;
-    unsigned int f, saved_f, framecount;
+    int f, saved_f, framecount;
 
     if(cv->refcount)
     {
         seterrno(EBUSY);
+        return -1;
+    }
+
+    if(w < 0 || h < 0)
+    {
+        seterrno(EINVAL);
         return -1;
     }
