Skip to content

Commit 931f962

Browse files
committed
fopen may fail for a bad name -> EXIT_ERRORS in that case #17
1 parent 76f0b5d commit 931f962

File tree

4 files changed

+46
-18
lines changed

4 files changed

+46
-18
lines changed

bins/unzzipcat-big.c

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
8383

8484
static int unzzip_cat (int argc, char ** argv, int extract)
8585
{
86+
int done = 0;
8687
int argn;
8788
FILE* disk;
8889

@@ -94,25 +95,25 @@ static int unzzip_cat (int argc, char ** argv, int extract)
9495

9596
if (argc == 2)
9697
{ /* print directory list */
97-
int warnings = 0;
9898
ZZIP_ENTRY* entry = zzip_entry_findfirst(disk);
9999
for (; entry ; entry = zzip_entry_findnext(entry))
100100
{
101101
char* name = zzip_entry_strdup_name (entry);
102102
FILE* out = stdout;
103103
if (! name) {
104-
warnings += 1;
104+
done = EXIT_WARNINGS;
105105
continue;
106106
}
107107
if (extract) out = create_fopen(name, "w", 1);
108+
if (! out) {
109+
done = EXIT_ERRORS;
110+
continue;
111+
}
108112
unzzip_cat_file (disk, name, out);
109113
if (extract) fclose(out);
110114
free (name);
111115
}
112-
if (warnings) {
113-
return EXIT_WARNINGS;
114-
}
115-
return 0;
116+
return done;
116117
}
117118

118119
if (argc == 3 && !extract)
@@ -137,14 +138,18 @@ static int unzzip_cat (int argc, char ** argv, int extract)
137138
{
138139
FILE* out = stdout;
139140
if (extract) out = create_fopen(name, "w", 1);
141+
if (! out) {
142+
done = EXIT_ERRORS;
143+
continue;
144+
}
140145
unzzip_cat_file (disk, name, out);
141146
if (extract) fclose(out);
142147
break; /* match loop */
143148
}
144149
free (name);
145150
}
146151
}
147-
return 0;
152+
return done;
148153
}
149154

150155
int unzzip_print (int argc, char ** argv)

bins/unzzipcat-mem.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ static void unzzip_mem_disk_cat_file(ZZIP_MEM_DISK* disk, char* name, FILE* out)
4848
ZZIP_DISK_FILE* file = zzip_mem_disk_fopen (disk, name);
4949
if (file)
5050
{
51-
char buffer[1024]; int len;
51+
char buffer[1025]; int len;
5252
while ((len = zzip_mem_disk_fread (buffer, 1, 1024, file)))
5353
{
5454
fwrite (buffer, 1, len, out);
@@ -87,6 +87,7 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
8787

8888
static int unzzip_cat (int argc, char ** argv, int extract)
8989
{
90+
int done;
9091
int argn;
9192
ZZIP_MEM_DISK* disk;
9293

@@ -112,10 +113,14 @@ static int unzzip_cat (int argc, char ** argv, int extract)
112113
char* name = zzip_mem_entry_to_name (entry);
113114
FILE* out = stdout;
114115
if (extract) out = create_fopen(name, "w", 1);
116+
if (! out) {
117+
done = EXIT_ERRORS;
118+
continue;
119+
}
115120
unzzip_mem_disk_cat_file (disk, name, out);
116121
if (extract) fclose(out);
117122
}
118-
return 0;
123+
return done;
119124
}
120125

121126
if (argc == 3 && !extract)
@@ -140,13 +145,17 @@ static int unzzip_cat (int argc, char ** argv, int extract)
140145
{
141146
FILE* out = stdout;
142147
if (extract) out = create_fopen(name, "w", 1);
148+
if (! out) {
149+
done = EXIT_ERRORS;
150+
continue;
151+
}
143152
unzzip_mem_disk_cat_file (disk, name, out);
144153
if (extract) fclose(out);
145154
break; /* match loop */
146155
}
147156
}
148157
}
149-
return 0;
158+
return done;
150159
}
151160

152161
int unzzip_print (int argc, char ** argv)

bins/unzzipcat-mix.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
9898

9999
static int unzzip_cat (int argc, char ** argv, int extract)
100100
{
101+
int done = 0;
101102
int argn;
102103
ZZIP_DIR* disk;
103104

@@ -122,6 +123,10 @@ static int unzzip_cat (int argc, char ** argv, int extract)
122123
char* name = entry->d_name;
123124
FILE* out = stdout;
124125
if (extract) out = create_fopen(name, "w", 1);
126+
if (! out) {
127+
done = EXIT_ERRORS;
128+
continue;
129+
}
125130
unzzip_cat_file (disk, name, out);
126131
if (extract) fclose(out);
127132
}
@@ -149,6 +154,10 @@ static int unzzip_cat (int argc, char ** argv, int extract)
149154
mix_name[zip_name_len] = '/';
150155
strcpy(mix_name + zip_name_len + 1, name);
151156
if (extract) out = create_fopen(name, "w", 1);
157+
if (! out) {
158+
done = EXIT_ERRORS;
159+
continue;
160+
}
152161
fprintf(stderr, "%s %s -> %s\n", zip_name, name, mix_name);
153162
/* 'test1.zip' 'README' -> 'test1/README' */
154163
unzzip_cat_file (disk, mix_name, out);
@@ -159,7 +168,7 @@ static int unzzip_cat (int argc, char ** argv, int extract)
159168
}
160169
}
161170
zzip_closedir(disk);
162-
return 0;
171+
return done;
163172
}
164173

165174
int unzzip_print (int argc, char ** argv)

bins/unzzipcat-zip.c

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
9797

9898
static int unzzip_cat (int argc, char ** argv, int extract)
9999
{
100+
int done = 0;
100101
int argn;
101102
ZZIP_DIR* disk;
102103
zzip_error_t error;
@@ -121,10 +122,12 @@ static int unzzip_cat (int argc, char ** argv, int extract)
121122
char* name = entry.d_name;
122123
FILE* out = stdout;
123124
if (extract) out = create_fopen(name, "w", 1);
124-
if (out) {
125-
unzzip_cat_file (disk, name, out);
126-
if (extract) fclose(out);
125+
if (! out) {
126+
done = EXIT_ERRORS;
127+
continue;
127128
}
129+
unzzip_cat_file (disk, name, out);
130+
if (extract) fclose(out);
128131
}
129132
}
130133
else
@@ -140,17 +143,19 @@ static int unzzip_cat (int argc, char ** argv, int extract)
140143
{
141144
FILE* out = stdout;
142145
if (extract) out = create_fopen(name, "w", 1);
143-
if (out) {
144-
unzzip_cat_file (disk, name, out);
145-
if (extract) fclose(out);
146+
if (! out) {
147+
done = EXIT_ERRORS;
148+
continue;
146149
}
150+
unzzip_cat_file (disk, name, out);
151+
if (extract) fclose(out);
147152
break; /* match loop */
148153
}
149154
}
150155
}
151156
}
152157
zzip_dir_close(disk);
153-
return 0;
158+
return done;
154159
}
155160

156161
int unzzip_print (int argc, char ** argv)

0 commit comments

Comments
 (0)