]> err.no Git - util-linux/commitdiff
setterm: opened file leaving unclosed
authorKarel Zak <kzak@redhat.com>
Thu, 25 Oct 2007 20:10:07 +0000 (22:10 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 25 Oct 2007 23:02:45 +0000 (01:02 +0200)
Co-Author: lizf <lizf@cn.fujitsu.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
misc-utils/setterm.c

index 5d889ea4faa412ab57f9ba576f26608dc8b750a9..ebf7f0ac777c7b9129eaf90035537f945039ae5a 100644 (file)
@@ -1133,24 +1133,22 @@ screendump(int vcnum, FILE *F) {
     }
     if (fd < 0) {
        sprintf(infile, "/dev/vcsa%d", vcnum);
-       goto error;
+       goto read_error;
     }
     if (read(fd, header, 4) != 4)
-       goto error;
+       goto read_error;
     rows = header[0];
     cols = header[1];
     if (rows * cols == 0)
-        goto error;
+        goto read_error;
     inbuf = malloc(rows*cols*2);
     outbuf = malloc(rows*(cols+1));
     if(!inbuf || !outbuf) {
        fputs(_("Out of memory"), stderr);
-       exit(1);
-    }
-    if (read(fd, inbuf, rows*cols*2) != rows*cols*2) {
-       fprintf(stderr, _("Error reading %s\n"), infile);
-       exit(1);
+       goto error;
     }
+    if (read(fd, inbuf, rows*cols*2) != rows*cols*2)
+           goto read_error;
     p = inbuf;
     q = outbuf;
     for(i=0; i<rows; i++) {
@@ -1164,12 +1162,16 @@ screendump(int vcnum, FILE *F) {
     }
     if (fwrite(outbuf, 1, q-outbuf, F) != q-outbuf) {
        fprintf(stderr, _("Error writing screendump\n"));
-       exit(1);
+       goto error;
     }
+    close(fd);
     return;
 
-error:
+read_error:
     fprintf(stderr, _("Couldn't read %s\n"), infile);
+error:
+    if (fd >= 0)
+           close(fd);
     exit(1);
 }