Skip to content

Commit

Permalink
fopen may fail for a bad name -> EXIT_ERRORS in that case #17
Browse files Browse the repository at this point in the history
  • Loading branch information
gdraheim committed Feb 5, 2018
1 parent 76f0b5d commit 931f962
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 18 deletions.
19 changes: 12 additions & 7 deletions bins/unzzipcat-big.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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)
Expand All @@ -137,14 +138,18 @@ 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 */
}
free (name);
}
}
return 0;
return done;
}

int unzzip_print (int argc, char ** argv)
Expand Down
15 changes: 12 additions & 3 deletions bins/unzzipcat-mem.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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;

Expand All @@ -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)
Expand All @@ -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)
Expand Down
11 changes: 10 additions & 1 deletion bins/unzzipcat-mix.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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);
}
Expand Down Expand Up @@ -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);
Expand All @@ -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)
Expand Down
19 changes: 12 additions & 7 deletions bins/unzzipcat-zip.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand All @@ -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)
Expand Down

0 comments on commit 931f962

Please sign in to comment.