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 }