]> granicus.if.org Git - zziplib/commitdiff
fopen may fail for a bad name -> EXIT_ERRORS in that case #17
authorGuido Draheim <guidod@gmx.de>
Mon, 5 Feb 2018 13:37:13 +0000 (14:37 +0100)
committerGuido Draheim <guidod@gmx.de>
Mon, 5 Feb 2018 13:37:13 +0000 (14:37 +0100)
bins/unzzipcat-big.c
bins/unzzipcat-mem.c
bins/unzzipcat-mix.c
bins/unzzipcat-zip.c

index 6cddb1f2849b572e576b1b08bf58b14ed3d92c79..9723842cca3e10c6675938f7dab9262c1110c90c 100644 (file)
@@ -83,6 +83,7 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
 
 static int unzzip_cat (int argc, char ** argv, int extract)
 {
+    int done = 0;
     int argn;
     FILE* disk;
 
@@ -94,25 +95,25 @@ static int unzzip_cat (int argc, char ** argv, int extract)
 
     if (argc == 2)
     {  /* print directory list */
-       int warnings = 0;
        ZZIP_ENTRY* entry = zzip_entry_findfirst(disk);
        for (; entry ; entry = zzip_entry_findnext(entry))
        {
            char* name = zzip_entry_strdup_name (entry);
            FILE* out = stdout;
            if (! name) {
-               warnings += 1;
+               done = EXIT_WARNINGS;
                continue;
            }
            if (extract) out = create_fopen(name, "w", 1);
+           if (! out) {
+               done = EXIT_ERRORS;
+               continue;
+           }
            unzzip_cat_file (disk, name, out);
            if (extract) fclose(out);
            free (name);
        }
-       if (warnings) {
-          return EXIT_WARNINGS;
-       }
-       return 0;
+       return done;
     }
 
     if (argc == 3 && !extract)
@@ -137,6 +138,10 @@ static int unzzip_cat (int argc, char ** argv, int extract)
            {
                FILE* out = stdout;
                if (extract) out = create_fopen(name, "w", 1);
+               if (! out) {
+                   done = EXIT_ERRORS;
+                   continue;
+               }
                unzzip_cat_file (disk, name, out);
                if (extract) fclose(out);
                break; /* match loop */
@@ -144,7 +149,7 @@ static int unzzip_cat (int argc, char ** argv, int extract)
            free (name);
        }
     }
-    return 0;
+    return done;
 } 
 
 int unzzip_print (int argc, char ** argv)
index fde6229c2e108e33216ad50d7d97dae31581b8af..ed671dcaba85ee657d4b161bce7e177a4af3c7fb 100644 (file)
@@ -48,7 +48,7 @@ static void unzzip_mem_disk_cat_file(ZZIP_MEM_DISK* disk, char* name, FILE* out)
     ZZIP_DISK_FILE* file = zzip_mem_disk_fopen (disk, name);
     if (file) 
     {
-       char buffer[1024]; int len;
+       char buffer[1025]; int len;
        while ((len = zzip_mem_disk_fread (buffer, 1, 1024, file))) 
        {
            fwrite (buffer, 1, len, out);
@@ -87,6 +87,7 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
 
 static int unzzip_cat (int argc, char ** argv, int extract)
 {
+    int done;
     int argn;
     ZZIP_MEM_DISK* disk;
 
@@ -112,10 +113,14 @@ static int unzzip_cat (int argc, char ** argv, int extract)
            char* name = zzip_mem_entry_to_name (entry);
            FILE* out = stdout;
            if (extract) out = create_fopen(name, "w", 1);
+           if (! out) {
+               done = EXIT_ERRORS;
+               continue;
+           }
            unzzip_mem_disk_cat_file (disk, name, out);
            if (extract) fclose(out);
        }
-       return 0;
+       return done;
     }
 
     if (argc == 3 && !extract)
@@ -140,13 +145,17 @@ static int unzzip_cat (int argc, char ** argv, int extract)
            {
                FILE* out = stdout;
                if (extract) out = create_fopen(name, "w", 1);
+               if (! out) {
+                   done = EXIT_ERRORS;
+                   continue;
+               }
                unzzip_mem_disk_cat_file (disk, name, out);
                if (extract) fclose(out);
                break; /* match loop */
            }
        }
     }
-    return 0;
+    return done;
 } 
 
 int unzzip_print (int argc, char ** argv)
index 84f637b10e9666301234dccfc42b66afaf82263b..c51064337ebc2b3e665e2dde8c4ccaed0d059b15 100644 (file)
@@ -98,6 +98,7 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
 
 static int unzzip_cat (int argc, char ** argv, int extract)
 {
+    int done = 0;
     int argn;
     ZZIP_DIR* disk;
     
@@ -122,6 +123,10 @@ static int unzzip_cat (int argc, char ** argv, int extract)
            char* name = entry->d_name;
            FILE* out = stdout;
            if (extract) out = create_fopen(name, "w", 1);
+           if (! out) {
+               done = EXIT_ERRORS;
+               continue;
+           }
            unzzip_cat_file (disk, name, out);
            if (extract) fclose(out);
        }
@@ -149,6 +154,10 @@ static int unzzip_cat (int argc, char ** argv, int extract)
                     mix_name[zip_name_len] = '/';
                     strcpy(mix_name + zip_name_len + 1, name);
                     if (extract) out = create_fopen(name, "w", 1);
+                    if (! out) {
+                        done = EXIT_ERRORS;
+                        continue;
+                    }
                     fprintf(stderr, "%s %s -> %s\n", zip_name, name, mix_name);
                     /* 'test1.zip' 'README' -> 'test1/README' */
                     unzzip_cat_file (disk, mix_name, out);
@@ -159,7 +168,7 @@ static int unzzip_cat (int argc, char ** argv, int extract)
        }
     }
     zzip_closedir(disk);
-    return 0;
+    return done;
 } 
 
 int unzzip_print (int argc, char ** argv)
index 6dcb2cf0185f69b37ab27cb20bbdde26ec891cf5..e77f641ffece7844010dac1b8f9305f676472009 100644 (file)
@@ -97,6 +97,7 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
 
 static int unzzip_cat (int argc, char ** argv, int extract)
 {
+    int done = 0;
     int argn;
     ZZIP_DIR* disk;
     zzip_error_t error;
@@ -121,10 +122,12 @@ static int unzzip_cat (int argc, char ** argv, int extract)
            char* name = entry.d_name;
            FILE* out = stdout;
            if (extract) out = create_fopen(name, "w", 1);
-           if (out) {
-               unzzip_cat_file (disk, name, out);
-               if (extract) fclose(out);
+           if (out) {
+               done = EXIT_ERRORS;
+               continue;
            }
+           unzzip_cat_file (disk, name, out);
+           if (extract) fclose(out);
        }
     }
     else
@@ -140,17 +143,19 @@ static int unzzip_cat (int argc, char ** argv, int extract)
                {
                    FILE* out = stdout;
                    if (extract) out = create_fopen(name, "w", 1);
-                   if (out) {
-                       unzzip_cat_file (disk, name, out);
-                       if (extract) fclose(out);
+                   if (out) {
+                       done = EXIT_ERRORS;
+                       continue;
                    }
+                   unzzip_cat_file (disk, name, out);
+                   if (extract) fclose(out);
                    break; /* match loop */
                }
            }
        }
     }
     zzip_dir_close(disk);
-    return 0;
+    return done;
 } 
 
 int unzzip_print (int argc, char ** argv)