fix leaks and improper return values in allocscreen() Reference: /n/atom/patch/applied2013/allocscreenleak Date: Wed Jun 19 06:42:29 CES 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/libdraw/window.c Wed Jun 19 06:42:13 2013 +++ /sys/src/libdraw/window.c Wed Jun 19 06:42:13 2013 @@ -20,27 +20,26 @@ return 0; } s = malloc(sizeof(Screen)); - if(s == 0) - return 0; - SET(id); + if(s == nil) + return nil; for(try=0; try<25; try++){ /* loop until find a free id */ a = bufimage(d, 1+4+4+4+1); - if(a == 0){ - free(s); - return 0; - } + if(a == 0) + break; id = ++screenid; a[0] = 'A'; BPLONG(a+1, id); BPLONG(a+5, image->id); BPLONG(a+9, fill->id); a[13] = public; - if(flushimage(d, 0) != -1){ - werrstr(""); - break; - } + if(flushimage(d, 0) != -1) + goto found; } + free(s); + return nil; +found: + werrstr(""); s->display = d; s->id = id; s->image = image;