ref: cb5f35db1154911f410d0c0139a990055ba4bb34
parent: e78d01b0984c87fbac71d3d2867baa3385a45c95
author: stanley lieber <stanley.lieber@gmail.com>
date: Tue Feb 28 19:47:26 EST 2012
paint: cleanup; don't sysfatal() on non-fatal errors
--- a/sys/src/cmd/paint.c
+++ b/sys/src/cmd/paint.c
@@ -10,43 +10,35 @@
sysfatal("resize failed");}
-void
+int
loadimg(char *name)
{Image *b;
int fd;
- fd=open(name, OREAD);
- if(fd==-1)
- sysfatal("can't open file");- if((b=readimage(display, fd, 0)) == nil)
- sysfatal("can't read image");- draw(screen, screen->r, b, 0, b->r.min);
- flushimage(display, 1);
- close(fd);
+ if((fd = open(name, OREAD)) < 0)
+ return -1;
+ else {+ if((b = readimage(display, fd, 0)) == nil){+ close(fd);
+ return -1;
+ } else {+ draw(screen, screen->r, b, 0, b->r.min);
+ flushimage(display, 1);
+ freeimage(b);
+ }
+ close(fd);
+ }
}
-/* stolen from mothra */
-void
-screendump(char *name, int full)
+int
+saveimg(char *name)
{- Image *b;
int fd;
- fd=create(name, OWRITE|OTRUNC, 0666);
- if(fd==-1)
- sysfatal("can't create file");- if(full){- writeimage(fd, screen, 0);
- } else {- if((b=allocimage(display, screen->r, screen->chan, 0, DNofill)) == nil){- close(fd);
- sysfatal("can't allocate image");- }
- draw(b, b->r, screen, 0, b->r.min);
- writeimage(fd, b, 0);
- freeimage(b);
- }
+ if((fd = create(name, OWRITE|OTRUNC, 0666)) < 0)
+ return -1;
+ writeimage(fd, screen, 0);
close(fd);
}
@@ -81,7 +73,8 @@
case 0:
break;
case 1:
- loadimg(argv[0]);
+ if(loadimg(argv[0]) < 0)
+ sysfatal("%r");break;
}
@@ -115,15 +108,20 @@
if(e.kbdc == 'o'){ if(eenter("Open file", file, sizeof(file), &e.mouse) <= 0)break;
- loadimg(file);
+ if(loadimg(file) < 0){+ rerrstr(file, sizeof(file));
+ eenter(file, 0, 0, &e.mouse);
+ }
}
if(e.kbdc == 'q')
exits(nil);
if(e.kbdc == 's'){- snprint(file, sizeof(file), "out.bit");
if(eenter("Save to", file, sizeof(file), &e.mouse) <= 0)break;
- screendump(file, 0);
+ if(saveimg(file) < 0){+ rerrstr(file, sizeof(file));
+ eenter(file, 0, 0, &e.mouse);
+ }
}
break;
}
--
⑨