Mercurial > hg > xemacs-beta
comparison nt/minitar.c @ 1529:d4c017f833e2
[xemacs-hg @ 2003-06-15 13:25:46 by adrian]
[A21.5R21.4] [PATCH] xemacs-21.5: minitar.c to handle 0 size files
-------------------- ChangeLog entries follow: --------------------
nt/ChangeLog addition:
2003-06-15 Adrian Aichner <adrian@xemacs.org>
* minitar.c (main): Handle 0 size files correctly.
author | adrian |
---|---|
date | Sun, 15 Jun 2003 13:25:46 +0000 |
parents | f846c2ef930d |
children | f5967016f79a |
comparison
equal
deleted
inserted
replaced
1528:16bd99a7ef3c | 1529:d4c017f833e2 |
---|---|
137 magic[6] = '\0'; | 137 magic[6] = '\0'; |
138 if (strcmp (magic, "ustar ")) | 138 if (strcmp (magic, "ustar ")) |
139 { | 139 { |
140 fprintf (stderr, | 140 fprintf (stderr, |
141 "Error: incorrect magic number in tar header. Exiting\n"); | 141 "Error: incorrect magic number in tar header. Exiting\n"); |
142 exit (-2); | |
142 } | 143 } |
143 | 144 |
144 strncpy (name, block, 100); | 145 strncpy (name, block, 100); |
145 name[100] = '\0'; | 146 name[100] = '\0'; |
146 sprintf (fullname, "%s/%s", basedir, name); | 147 sprintf (fullname, "%s/%s", basedir, name); |
156 case '5': | 157 case '5': |
157 directory = 1; | 158 directory = 1; |
158 break; | 159 break; |
159 default: | 160 default: |
160 fprintf (stderr, "Error: unknown type flag %c. Exiting.\n", type); | 161 fprintf (stderr, "Error: unknown type flag %c. Exiting.\n", type); |
162 exit (-2); | |
161 break; | 163 break; |
162 } | 164 } |
163 | 165 |
164 if (directory) | 166 if (directory) |
165 { | 167 { |
216 if (size<0) | 218 if (size<0) |
217 { | 219 { |
218 fprintf (stderr, "Error: invalid size in tar header. Exiting.\n"); | 220 fprintf (stderr, "Error: invalid size in tar header. Exiting.\n"); |
219 exit (-2); | 221 exit (-2); |
220 } | 222 } |
223 if (size==0) /* file of size 0 is done */ | |
224 in_block = 0; | |
221 } | 225 } |
222 } else { /* write or continue writing file contents */ | 226 } else { /* write or continue writing file contents */ |
223 nbytes = size>512? 512:size; | 227 nbytes = size>512? 512:size; |
224 | 228 |
225 nwritten = fwrite (block, 1, nbytes, outfile); | 229 nwritten = fwrite (block, 1, nbytes, outfile); |
226 if (nwritten != nbytes) | 230 if (nwritten != nbytes) |
227 { | 231 { |
228 fprintf (stderr, "Error: only wrote %d bytes to file %s. Exiting.\n", | 232 fprintf (stderr, "Error: only wrote %d bytes to file %s. Exiting.\n", |
229 nwritten, fullname); | 233 nwritten, fullname); |
234 exit (-2); | |
230 } | 235 } |
231 size -= nbytes; | 236 size -= nbytes; |
232 if (size==0) | 237 if (size==0) |
233 in_block = 0; | 238 in_block = 0; |
234 } | 239 } |