]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/libmemdraw/alloc.c
pc: add vmx device
[plan9front.git] / sys / src / libmemdraw / alloc.c
index 14abdf53daf14e957510bd6811e4069548e3ac65..0dba4503ff32dd8cb0d403de3a45f830c1ee252b 100644 (file)
@@ -27,14 +27,14 @@ allocmemimaged(Rectangle r, ulong chan, Memdata *md)
        ulong l;
        Memimage *i;
 
-       if(Dx(r) <= 0 || Dy(r) <= 0){
-               werrstr("bad rectangle %R", r);
-               return nil;
-       }
        if((d = chantodepth(chan)) == 0) {
                werrstr("bad channel descriptor %.8lux", chan);
                return nil;
        }
+       if(badrect(r)){
+               werrstr("bad rectangle %R", r);
+               return nil;
+       }
 
        l = wordsperline(r, d);
 
@@ -76,8 +76,13 @@ allocmemimage(Rectangle r, ulong chan)
                werrstr("bad channel descriptor %.8lux", chan);
                return nil;
        }
+       if(badrect(r)){
+               werrstr("bad rectangle %R", r);
+               return nil;
+       }
 
        l = wordsperline(r, d);
+
        nw = l*Dy(r);
        md = malloc(sizeof(Memdata));
        if(md == nil)
@@ -116,7 +121,7 @@ freememimage(Memimage *i)
 {
        if(i == nil)
                return;
-       if(i->data->ref-- == 1 && i->data->allocd){
+       if(--i->data->ref == 0 && i->data->allocd){
                if(i->data->base)
                        poolfree(imagmem, i->data->base);
                free(i->data);
@@ -138,8 +143,7 @@ byteaddr(Memimage *i, Point p)
 {
        uchar *a;
 
-       a = i->data->bdata+i->zero+sizeof(ulong)*p.y*i->width;
-
+       a = i->data->bdata+i->zero+(int)(sizeof(ulong)*p.y*i->width);
        if(i->depth < 8){
                /*
                 * We need to always round down,