summaryrefslogtreecommitdiff
path: root/sys/src/cmd/paint.c
diff options
context:
space:
mode:
authorstanley lieber <stanley.lieber@gmail.com>2012-02-29 00:47:26 +0000
committerstanley lieber <stanley.lieber@gmail.com>2012-02-29 00:47:26 +0000
commit670ed275916fc921d8b5b73f41eb1019854842f3 (patch)
treebcef39628cbab7b7bd1ab966b1fb4b65a82e9acf /sys/src/cmd/paint.c
parent34db0ca76370b89c6b4d45e287ff053150272a2e (diff)
paint: cleanup; don't sysfatal() on non-fatal errors
Diffstat (limited to 'sys/src/cmd/paint.c')
-rw-r--r--sys/src/cmd/paint.c60
1 files changed, 29 insertions, 31 deletions
diff --git a/sys/src/cmd/paint.c b/sys/src/cmd/paint.c
index 46c89608f..f10000955 100644
--- a/sys/src/cmd/paint.c
+++ b/sys/src/cmd/paint.c
@@ -10,43 +10,35 @@ eresized(int)
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 @@ main(int argc, char *argv[])
case 0:
break;
case 1:
- loadimg(argv[0]);
+ if(loadimg(argv[0]) < 0)
+ sysfatal("%r");
break;
}
@@ -115,15 +108,20 @@ main(int argc, char *argv[])
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;
}