Hi,

this diff adds error handling for funopen() failure.  I have also fixed
a whitespace issue for proper intendation.


Tobias

Index: usr.bin/compress/zopen.c
===================================================================
RCS file: /cvs/src/usr.bin/compress/zopen.c,v
retrieving revision 1.19
diff -u -p -r1.19 zopen.c
--- usr.bin/compress/zopen.c    16 Jan 2015 06:40:06 -0000      1.19
+++ usr.bin/compress/zopen.c    31 Jan 2015 15:36:23 -0000
@@ -278,7 +278,7 @@ zwrite(void *cookie, const char *wbp, in
                        /* Secondary hash (after G. Knott). */
                        disp = zs->zs_hsize_reg - i;
                        if (i == 0)
-                       disp = 1;
+                               disp = 1;
 probe:                 if ((i -= disp) < 0)
                                i += zs->zs_hsize_reg;
 
@@ -738,6 +738,7 @@ cl_hash(struct s_zstate *zs, count_int c
 FILE *
 zopen(const char *name, const char *mode, int bits)
 {
+       FILE *fp;
        int fd;
        void *cookie;
        if ((fd = open(name, (*mode=='r'? O_RDONLY:O_WRONLY|O_CREAT),
@@ -747,8 +748,13 @@ zopen(const char *name, const char *mode
                close(fd);
                return NULL;
        }
-       return funopen(cookie, (*mode == 'r'?zread:NULL),
-           (*mode == 'w'?zwrite:NULL), NULL, zclose);
+       if ((fp = funopen(cookie, (*mode == 'r'?zread:NULL),
+           (*mode == 'w'?zwrite:NULL), NULL, zclose)) == NULL) {
+               close(fd);
+               free(cookie);
+               return NULL;
+       }
+       return fp;
 }
 
 void *

Reply via email to