1 /*-
2 * Copyright (c) 2003-2008 Tim Kientzle
3 * Copyright (c) 2009,2010 Michihiro NAKAJIMA
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
16 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26 #include "test.h"
27
28 static char buff2[64];
DEFINE_TEST(test_write_format_iso9660)29 DEFINE_TEST(test_write_format_iso9660)
30 {
31 size_t buffsize = 1000000;
32 char *buff;
33 struct archive_entry *ae;
34 struct archive *a;
35 char dirname[1024];
36 char dir[6];
37 char longname[] =
38 "longname00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
39 "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
40 "cccccccccccccccccccccccccccccccccccccccccccccccccc"
41 "dddddddddddddddddddddddddddddddddddddddddddddddddd";
42
43 size_t used;
44 int i;
45
46 buff = malloc(buffsize); /* million bytes of work area */
47 assert(buff != NULL);
48
49 /* Create a new archive in memory. */
50 assert((a = archive_write_new()) != NULL);
51 assertA(0 == archive_write_set_format_iso9660(a));
52 assertA(0 == archive_write_add_filter_none(a));
53 assertA(0 == archive_write_open_memory(a, buff, buffsize, &used));
54
55 /*
56 * "file" has a bunch of attributes and 8 bytes of data.
57 */
58 assert((ae = archive_entry_new()) != NULL);
59 archive_entry_set_atime(ae, 2, 20);
60 archive_entry_set_birthtime(ae, 3, 30);
61 archive_entry_set_ctime(ae, 4, 40);
62 archive_entry_set_mtime(ae, 5, 50);
63 archive_entry_copy_pathname(ae, "file");
64 archive_entry_set_mode(ae, AE_IFREG | 0755);
65 archive_entry_set_size(ae, 8);
66 archive_entry_set_nlink(ae, 2);
67 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
68 archive_entry_free(ae);
69 assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9));
70
71 /*
72 * "hardlnk" has linked to "file".
73 */
74 assert((ae = archive_entry_new()) != NULL);
75 archive_entry_set_atime(ae, 2, 20);
76 archive_entry_set_birthtime(ae, 3, 30);
77 archive_entry_set_ctime(ae, 4, 40);
78 archive_entry_set_mtime(ae, 5, 50);
79 archive_entry_copy_pathname(ae, "hardlnk");
80 archive_entry_set_mode(ae, AE_IFREG | 0755);
81 archive_entry_set_hardlink(ae, "file");
82 archive_entry_set_nlink(ae, 2);
83 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
84 archive_entry_free(ae);
85
86 /*
87 * longname is similar but has birthtime later than mtime.
88 */
89 assert((ae = archive_entry_new()) != NULL);
90 archive_entry_set_atime(ae, 2, 20);
91 archive_entry_set_birthtime(ae, 8, 80);
92 archive_entry_set_ctime(ae, 4, 40);
93 archive_entry_set_mtime(ae, 5, 50);
94 archive_entry_copy_pathname(ae, longname);
95 archive_entry_set_mode(ae, AE_IFREG | 0666);
96 archive_entry_set_size(ae, 8);
97 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
98 archive_entry_free(ae);
99 assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9));
100
101 /*
102 * "symlnk has symbolic linked to longname.
103 */
104 assert((ae = archive_entry_new()) != NULL);
105 archive_entry_set_atime(ae, 2, 20);
106 archive_entry_set_ctime(ae, 4, 40);
107 archive_entry_set_mtime(ae, 5, 50);
108 archive_entry_copy_pathname(ae, "symlnk");
109 archive_entry_set_mode(ae, AE_IFLNK | 0555);
110 archive_entry_set_symlink(ae, longname);
111 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
112 archive_entry_free(ae);
113
114 /*
115 * "dir*" has a bunch of attributes.
116 */
117 dirname[0] = '\0';
118 strcpy(dir, "/dir0");
119 for (i = 0; i < 13; i++) {
120 dir[4] = "0123456789ABCDEF"[i];
121 if (i == 0)
122 strcat(dirname, dir+1);
123 else
124 strcat(dirname, dir);
125 assert((ae = archive_entry_new()) != NULL);
126 archive_entry_set_atime(ae, 2, 20);
127 archive_entry_set_birthtime(ae, 3, 30);
128 archive_entry_set_ctime(ae, 4, 40);
129 archive_entry_set_mtime(ae, 5, 50);
130 archive_entry_copy_pathname(ae, dirname);
131 archive_entry_set_mode(ae, S_IFDIR | 0755);
132 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
133 archive_entry_free(ae);
134 }
135
136 strcat(dirname, "/file");
137 assert((ae = archive_entry_new()) != NULL);
138 archive_entry_set_atime(ae, 2, 20);
139 archive_entry_set_birthtime(ae, 3, 30);
140 archive_entry_set_ctime(ae, 4, 40);
141 archive_entry_set_mtime(ae, 5, 50);
142 archive_entry_copy_pathname(ae, dirname);
143 archive_entry_set_mode(ae, S_IFREG | 0755);
144 archive_entry_set_size(ae, 8);
145 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
146 archive_entry_free(ae);
147 assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9));
148
149 /*
150 * "dir0/dir1/file1" has 8 bytes of data.
151 */
152 assert((ae = archive_entry_new()) != NULL);
153 archive_entry_set_atime(ae, 2, 20);
154 archive_entry_set_birthtime(ae, 3, 30);
155 archive_entry_set_ctime(ae, 4, 40);
156 archive_entry_set_mtime(ae, 5, 50);
157 archive_entry_copy_pathname(ae, "dir0/dir1/file1");
158 archive_entry_set_mode(ae, AE_IFREG | 0755);
159 archive_entry_set_size(ae, 8);
160 archive_entry_set_nlink(ae, 1);
161 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
162 archive_entry_free(ae);
163 assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9));
164
165 /*
166 * "dir0/dir1/file2" has 8 bytes of data.
167 */
168 assert((ae = archive_entry_new()) != NULL);
169 archive_entry_set_atime(ae, 2, 20);
170 archive_entry_set_birthtime(ae, 3, 30);
171 archive_entry_set_ctime(ae, 4, 40);
172 archive_entry_set_mtime(ae, 5, 50);
173 archive_entry_copy_pathname(ae, "dir0/dir1/file2");
174 archive_entry_set_mode(ae, AE_IFREG | 0755);
175 archive_entry_set_size(ae, 8);
176 archive_entry_set_nlink(ae, 1);
177 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
178 archive_entry_free(ae);
179 assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9));
180
181 /*
182 * Add a wrong path "dir0/dir1/file2/wrong"
183 */
184 assert((ae = archive_entry_new()) != NULL);
185 archive_entry_set_atime(ae, 2, 20);
186 archive_entry_set_birthtime(ae, 3, 30);
187 archive_entry_set_ctime(ae, 4, 40);
188 archive_entry_set_mtime(ae, 5, 50);
189 archive_entry_copy_pathname(ae, "dir0/dir1/file2/wrong");
190 archive_entry_set_mode(ae, AE_IFREG | 0755);
191 archive_entry_set_size(ae, 8);
192 archive_entry_set_nlink(ae, 1);
193 assertEqualIntA(a, ARCHIVE_FAILED, archive_write_header(a, ae));
194 archive_entry_free(ae);
195
196 /* Close out the archive. */
197 assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
198 assertEqualIntA(a, ARCHIVE_OK, archive_write_free(a));
199
200 /*
201 * -----------------------------------------------------------
202 * Now, read the data back(read Rockridge extensions).
203 * -----------------------------------------------------------
204 */
205 assert((a = archive_read_new()) != NULL);
206 assertEqualIntA(a, 0, archive_read_support_format_all(a));
207 assertEqualIntA(a, 0, archive_read_support_filter_all(a));
208 assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used));
209
210 /*
211 * Read Root Directory
212 */
213 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
214 assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae));
215 assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae));
216 assertEqualString(".", archive_entry_pathname(ae));
217 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
218 assertEqualInt(2048, archive_entry_size(ae));
219
220 /*
221 * Read "dir0"
222 */
223 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
224 assertEqualInt(2, archive_entry_atime(ae));
225 assertEqualInt(3, archive_entry_birthtime(ae));
226 assertEqualInt(4, archive_entry_ctime(ae));
227 assertEqualInt(5, archive_entry_mtime(ae));
228 assertEqualString("dir0", archive_entry_pathname(ae));
229 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
230 assertEqualInt(2048, archive_entry_size(ae));
231
232 /*
233 * Read "dir0/dir1"
234 */
235 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
236 assertEqualInt(2, archive_entry_atime(ae));
237 assertEqualInt(3, archive_entry_birthtime(ae));
238 assertEqualInt(4, archive_entry_ctime(ae));
239 assertEqualInt(5, archive_entry_mtime(ae));
240 assertEqualString("dir0/dir1", archive_entry_pathname(ae));
241 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
242 assertEqualInt(2048, archive_entry_size(ae));
243
244 /*
245 * Read "dir0/dir1/dir2"
246 */
247 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
248 assertEqualInt(2, archive_entry_atime(ae));
249 assertEqualInt(3, archive_entry_birthtime(ae));
250 assertEqualInt(4, archive_entry_ctime(ae));
251 assertEqualInt(5, archive_entry_mtime(ae));
252 assertEqualString("dir0/dir1/dir2", archive_entry_pathname(ae));
253 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
254 assertEqualInt(2048, archive_entry_size(ae));
255
256 /*
257 * Read "dir0/dir1/dir2/dir3"
258 */
259 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
260 assertEqualInt(2, archive_entry_atime(ae));
261 assertEqualInt(3, archive_entry_birthtime(ae));
262 assertEqualInt(4, archive_entry_ctime(ae));
263 assertEqualInt(5, archive_entry_mtime(ae));
264 assertEqualString("dir0/dir1/dir2/dir3",
265 archive_entry_pathname(ae));
266 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
267 assertEqualInt(2048, archive_entry_size(ae));
268
269 /*
270 * Read "dir0/dir1/dir2/dir3/dir4"
271 */
272 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
273 assertEqualInt(2, archive_entry_atime(ae));
274 assertEqualInt(3, archive_entry_birthtime(ae));
275 assertEqualInt(4, archive_entry_ctime(ae));
276 assertEqualInt(5, archive_entry_mtime(ae));
277 assertEqualString("dir0/dir1/dir2/dir3/dir4",
278 archive_entry_pathname(ae));
279 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
280 assertEqualInt(2048, archive_entry_size(ae));
281
282 /*
283 * Read "dir0/dir1/dir2/dir3/dir4/dir5"
284 */
285 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
286 assertEqualInt(2, archive_entry_atime(ae));
287 assertEqualInt(3, archive_entry_birthtime(ae));
288 assertEqualInt(4, archive_entry_ctime(ae));
289 assertEqualInt(5, archive_entry_mtime(ae));
290 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5",
291 archive_entry_pathname(ae));
292 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
293 assertEqualInt(2048, archive_entry_size(ae));
294
295 /*
296 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6"
297 */
298 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
299 assertEqualInt(2, archive_entry_atime(ae));
300 assertEqualInt(3, archive_entry_birthtime(ae));
301 assertEqualInt(4, archive_entry_ctime(ae));
302 assertEqualInt(5, archive_entry_mtime(ae));
303 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6",
304 archive_entry_pathname(ae));
305 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
306 assertEqualInt(2048, archive_entry_size(ae));
307
308 /*
309 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7"
310 */
311 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
312 assertEqualInt(2, archive_entry_atime(ae));
313 assertEqualInt(3, archive_entry_birthtime(ae));
314 assertEqualInt(4, archive_entry_ctime(ae));
315 assertEqualInt(5, archive_entry_mtime(ae));
316 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7",
317 archive_entry_pathname(ae));
318 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
319 assertEqualInt(2048, archive_entry_size(ae));
320
321 /*
322 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8"
323 */
324 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
325 assertEqualInt(2, archive_entry_atime(ae));
326 assertEqualInt(3, archive_entry_birthtime(ae));
327 assertEqualInt(4, archive_entry_ctime(ae));
328 assertEqualInt(5, archive_entry_mtime(ae));
329 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8",
330 archive_entry_pathname(ae));
331 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
332 assertEqualInt(2048, archive_entry_size(ae));
333
334 /*
335 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9"
336 */
337 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
338 assertEqualInt(2, archive_entry_atime(ae));
339 assertEqualInt(3, archive_entry_birthtime(ae));
340 assertEqualInt(4, archive_entry_ctime(ae));
341 assertEqualInt(5, archive_entry_mtime(ae));
342 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9",
343 archive_entry_pathname(ae));
344 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
345 assertEqualInt(2048, archive_entry_size(ae));
346
347 /*
348 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA"
349 */
350 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
351 assertEqualInt(2, archive_entry_atime(ae));
352 assertEqualInt(3, archive_entry_birthtime(ae));
353 assertEqualInt(4, archive_entry_ctime(ae));
354 assertEqualInt(5, archive_entry_mtime(ae));
355 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA",
356 archive_entry_pathname(ae));
357 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
358 assertEqualInt(2048, archive_entry_size(ae));
359
360 /*
361 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB"
362 */
363 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
364 assertEqualInt(2, archive_entry_atime(ae));
365 assertEqualInt(3, archive_entry_birthtime(ae));
366 assertEqualInt(4, archive_entry_ctime(ae));
367 assertEqualInt(5, archive_entry_mtime(ae));
368 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB",
369 archive_entry_pathname(ae));
370 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
371 assertEqualInt(2048, archive_entry_size(ae));
372
373 /*
374 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC"
375 */
376 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
377 assertEqualInt(2, archive_entry_atime(ae));
378 assertEqualInt(3, archive_entry_birthtime(ae));
379 assertEqualInt(4, archive_entry_ctime(ae));
380 assertEqualInt(5, archive_entry_mtime(ae));
381 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC",
382 archive_entry_pathname(ae));
383 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
384 assertEqualInt(2048, archive_entry_size(ae));
385
386 /*
387 * Read "file"
388 */
389 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
390 assertEqualInt(2, archive_entry_atime(ae));
391 assertEqualInt(3, archive_entry_birthtime(ae));
392 assertEqualInt(4, archive_entry_ctime(ae));
393 assertEqualInt(5, archive_entry_mtime(ae));
394 assertEqualString("file", archive_entry_pathname(ae));
395 assert((AE_IFREG | 0555) == archive_entry_mode(ae));
396 assertEqualInt(2, archive_entry_nlink(ae));
397 assertEqualInt(8, archive_entry_size(ae));
398 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
399 assertEqualMem(buff2, "12345678", 8);
400
401 /*
402 * Read "hardlnk"
403 */
404 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
405 assertEqualInt(2, archive_entry_atime(ae));
406 assertEqualInt(3, archive_entry_birthtime(ae));
407 assertEqualInt(4, archive_entry_ctime(ae));
408 assertEqualInt(5, archive_entry_mtime(ae));
409 assertEqualString("hardlnk", archive_entry_pathname(ae));
410 assertEqualString("file", archive_entry_hardlink(ae));
411 assert((AE_IFREG | 0555) == archive_entry_mode(ae));
412 assertEqualInt(2, archive_entry_nlink(ae));
413 assertEqualInt(0, archive_entry_size(ae));
414
415 /*
416 * Read longname
417 */
418 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
419 assert(archive_entry_atime_is_set(ae));
420 assertEqualInt(2, archive_entry_atime(ae));
421 /* Birthtime > mtime above, so it doesn't get stored at all. */
422 assert(!archive_entry_birthtime_is_set(ae));
423 assertEqualInt(0, archive_entry_birthtime(ae));
424 assert(archive_entry_ctime_is_set(ae));
425 assertEqualInt(4, archive_entry_ctime(ae));
426 assert(archive_entry_mtime_is_set(ae));
427 assertEqualInt(5, archive_entry_mtime(ae));
428 assertEqualString(longname, archive_entry_pathname(ae));
429 #if !defined(_WIN32) && !defined(__CYGWIN__)
430 assert((AE_IFREG | 0444) == archive_entry_mode(ae));
431 #else
432 /* On Windows and CYGWIN, always set all exec bit ON by default. */
433 assert((AE_IFREG | 0555) == archive_entry_mode(ae));
434 #endif
435 assertEqualInt(8, archive_entry_size(ae));
436 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
437 assertEqualMem(buff2, "12345678", 8);
438
439 /*
440 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC/file"
441 */
442 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
443 assertEqualInt(2, archive_entry_atime(ae));
444 assertEqualInt(3, archive_entry_birthtime(ae));
445 assertEqualInt(4, archive_entry_ctime(ae));
446 assertEqualInt(5, archive_entry_mtime(ae));
447 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC/file", archive_entry_pathname(ae));
448 assert((AE_IFREG | 0555) == archive_entry_mode(ae));
449 assertEqualInt(1, archive_entry_nlink(ae));
450 assertEqualInt(8, archive_entry_size(ae));
451 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
452 assertEqualMem(buff2, "12345678", 8);
453
454 /*
455 * Read "dir0/dir1/file1"
456 */
457 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
458 assertEqualInt(2, archive_entry_atime(ae));
459 assertEqualInt(3, archive_entry_birthtime(ae));
460 assertEqualInt(4, archive_entry_ctime(ae));
461 assertEqualInt(5, archive_entry_mtime(ae));
462 assertEqualString("dir0/dir1/file1", archive_entry_pathname(ae));
463 assert((AE_IFREG | 0555) == archive_entry_mode(ae));
464 assertEqualInt(1, archive_entry_nlink(ae));
465 assertEqualInt(8, archive_entry_size(ae));
466 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
467 assertEqualMem(buff2, "12345678", 8);
468
469 /*
470 * Read "dir0/dir1/file2"
471 */
472 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
473 assertEqualInt(2, archive_entry_atime(ae));
474 assertEqualInt(3, archive_entry_birthtime(ae));
475 assertEqualInt(4, archive_entry_ctime(ae));
476 assertEqualInt(5, archive_entry_mtime(ae));
477 assertEqualString("dir0/dir1/file2", archive_entry_pathname(ae));
478 assert((AE_IFREG | 0555) == archive_entry_mode(ae));
479 assertEqualInt(1, archive_entry_nlink(ae));
480 assertEqualInt(8, archive_entry_size(ae));
481 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
482 assertEqualMem(buff2, "12345678", 8);
483
484 /*
485 * Read "symlnk"
486 */
487 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
488 assert(archive_entry_atime_is_set(ae));
489 assertEqualInt(2, archive_entry_atime(ae));
490 assert(!archive_entry_birthtime_is_set(ae));
491 assertEqualInt(0, archive_entry_birthtime(ae));
492 assert(archive_entry_ctime_is_set(ae));
493 assertEqualInt(4, archive_entry_ctime(ae));
494 assert(archive_entry_mtime_is_set(ae));
495 assertEqualInt(5, archive_entry_mtime(ae));
496 assertEqualString("symlnk", archive_entry_pathname(ae));
497 assert((AE_IFLNK | 0555) == archive_entry_mode(ae));
498 assertEqualString(longname, archive_entry_symlink(ae));
499
500 /*
501 * Verify the end of the archive.
502 */
503 assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
504 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
505 assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
506
507 /*
508 * -----------------------------------------------------------
509 * Now, read the data back without Rockridge option
510 * (read Joliet extensions).
511 * -----------------------------------------------------------
512 */
513 assert((a = archive_read_new()) != NULL);
514 assertEqualIntA(a, 0, archive_read_support_format_all(a));
515 assertEqualIntA(a, 0, archive_read_support_filter_all(a));
516 /* Disable Rockridge extensions support. */
517 assertEqualInt(ARCHIVE_OK,
518 archive_read_set_option(a, NULL, "rockridge", NULL));
519 assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used));
520
521 /*
522 * Read Root Directory
523 */
524 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
525 assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae));
526 assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae));
527 assertEqualString(".", archive_entry_pathname(ae));
528 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
529 assertEqualInt(2048, archive_entry_size(ae));
530
531 /*
532 * Read "dir0"
533 */
534 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
535 assertEqualInt(5, archive_entry_atime(ae));
536 assertEqualInt(5, archive_entry_ctime(ae));
537 assertEqualInt(5, archive_entry_mtime(ae));
538 assertEqualString("dir0", archive_entry_pathname(ae));
539 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
540 assertEqualInt(2048, archive_entry_size(ae));
541
542 /*
543 * Read "dir0/dir1"
544 */
545 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
546 assertEqualInt(5, archive_entry_atime(ae));
547 assertEqualInt(5, archive_entry_ctime(ae));
548 assertEqualInt(5, archive_entry_mtime(ae));
549 assertEqualString("dir0/dir1", archive_entry_pathname(ae));
550 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
551 assertEqualInt(2048, archive_entry_size(ae));
552
553 /*
554 * Read "dir0/dir1/dir2"
555 */
556 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
557 assertEqualInt(5, archive_entry_atime(ae));
558 assertEqualInt(5, archive_entry_ctime(ae));
559 assertEqualInt(5, archive_entry_mtime(ae));
560 assertEqualString("dir0/dir1/dir2", archive_entry_pathname(ae));
561 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
562 assertEqualInt(2048, archive_entry_size(ae));
563
564 /*
565 * Read "dir0/dir1/dir2/dir3"
566 */
567 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
568 assertEqualInt(5, archive_entry_atime(ae));
569 assertEqualInt(5, archive_entry_ctime(ae));
570 assertEqualInt(5, archive_entry_mtime(ae));
571 assertEqualString("dir0/dir1/dir2/dir3",
572 archive_entry_pathname(ae));
573 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
574 assertEqualInt(2048, archive_entry_size(ae));
575
576 /*
577 * Read "dir0/dir1/dir2/dir3/dir4"
578 */
579 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
580 assertEqualInt(5, archive_entry_atime(ae));
581 assertEqualInt(5, archive_entry_ctime(ae));
582 assertEqualInt(5, archive_entry_mtime(ae));
583 assertEqualString("dir0/dir1/dir2/dir3/dir4",
584 archive_entry_pathname(ae));
585 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
586 assertEqualInt(2048, archive_entry_size(ae));
587
588 /*
589 * Read "dir0/dir1/dir2/dir3/dir4/dir5"
590 */
591 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
592 assertEqualInt(5, archive_entry_atime(ae));
593 assertEqualInt(5, archive_entry_ctime(ae));
594 assertEqualInt(5, archive_entry_mtime(ae));
595 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5",
596 archive_entry_pathname(ae));
597 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
598 assertEqualInt(2048, archive_entry_size(ae));
599
600 /*
601 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6"
602 */
603 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
604 assertEqualInt(5, archive_entry_atime(ae));
605 assertEqualInt(5, archive_entry_ctime(ae));
606 assertEqualInt(5, archive_entry_mtime(ae));
607 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6",
608 archive_entry_pathname(ae));
609 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
610 assertEqualInt(2048, archive_entry_size(ae));
611
612 /*
613 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7"
614 */
615 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
616 assertEqualInt(5, archive_entry_atime(ae));
617 assertEqualInt(5, archive_entry_ctime(ae));
618 assertEqualInt(5, archive_entry_mtime(ae));
619 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7",
620 archive_entry_pathname(ae));
621 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
622 assertEqualInt(2048, archive_entry_size(ae));
623
624 /*
625 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8"
626 */
627 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
628 assertEqualInt(5, archive_entry_atime(ae));
629 assertEqualInt(5, archive_entry_ctime(ae));
630 assertEqualInt(5, archive_entry_mtime(ae));
631 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8",
632 archive_entry_pathname(ae));
633 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
634 assertEqualInt(2048, archive_entry_size(ae));
635
636 /*
637 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9"
638 */
639 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
640 assertEqualInt(5, archive_entry_atime(ae));
641 assertEqualInt(5, archive_entry_ctime(ae));
642 assertEqualInt(5, archive_entry_mtime(ae));
643 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9",
644 archive_entry_pathname(ae));
645 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
646 assertEqualInt(2048, archive_entry_size(ae));
647
648 /*
649 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA"
650 */
651 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
652 assertEqualInt(5, archive_entry_atime(ae));
653 assertEqualInt(5, archive_entry_ctime(ae));
654 assertEqualInt(5, archive_entry_mtime(ae));
655 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA",
656 archive_entry_pathname(ae));
657 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
658 assertEqualInt(2048, archive_entry_size(ae));
659
660 /*
661 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB"
662 */
663 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
664 assertEqualInt(5, archive_entry_atime(ae));
665 assertEqualInt(5, archive_entry_ctime(ae));
666 assertEqualInt(5, archive_entry_mtime(ae));
667 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB",
668 archive_entry_pathname(ae));
669 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
670 assertEqualInt(2048, archive_entry_size(ae));
671
672 /*
673 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC"
674 */
675 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
676 assertEqualInt(5, archive_entry_atime(ae));
677 assertEqualInt(5, archive_entry_ctime(ae));
678 assertEqualInt(5, archive_entry_mtime(ae));
679 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC",
680 archive_entry_pathname(ae));
681 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
682 assertEqualInt(2048, archive_entry_size(ae));
683
684 /*
685 * Read "file"
686 */
687 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
688 assertEqualInt(5, archive_entry_atime(ae));
689 assertEqualInt(5, archive_entry_ctime(ae));
690 assertEqualInt(5, archive_entry_mtime(ae));
691 assertEqualString("file", archive_entry_pathname(ae));
692 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
693 assertEqualInt(8, archive_entry_size(ae));
694 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
695 assertEqualMem(buff2, "12345678", 8);
696
697 /*
698 * Read "hardlnk"
699 */
700 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
701 assertEqualInt(5, archive_entry_atime(ae));
702 assertEqualInt(5, archive_entry_ctime(ae));
703 assertEqualInt(5, archive_entry_mtime(ae));
704 assertEqualString("hardlnk", archive_entry_pathname(ae));
705 assertEqualString("file", archive_entry_hardlink(ae));
706 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
707 assertEqualInt(2, archive_entry_nlink(ae));
708 assertEqualInt(0, archive_entry_size(ae));
709 assertEqualIntA(a, 0, archive_read_data(a, buff2, 10));
710
711 /*
712 * Read longname
713 */
714 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
715 assert(archive_entry_atime_is_set(ae));
716 assertEqualInt(5, archive_entry_atime(ae));
717 assert(archive_entry_ctime_is_set(ae));
718 assertEqualInt(5, archive_entry_ctime(ae));
719 assert(archive_entry_mtime_is_set(ae));
720 assertEqualInt(5, archive_entry_mtime(ae));
721 /* Trim longname to 64 characters. */
722 longname[64] = '\0';
723 assertEqualString(longname, archive_entry_pathname(ae));
724 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
725 assertEqualInt(8, archive_entry_size(ae));
726 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
727 assertEqualMem(buff2, "12345678", 8);
728
729 /*
730 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC/file"
731 */
732 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
733 assertEqualInt(5, archive_entry_atime(ae));
734 assertEqualInt(5, archive_entry_ctime(ae));
735 assertEqualInt(5, archive_entry_mtime(ae));
736 assertEqualString(
737 "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC/file",
738 archive_entry_pathname(ae));
739 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
740 assertEqualInt(1, archive_entry_nlink(ae));
741 assertEqualInt(8, archive_entry_size(ae));
742 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
743 assertEqualMem(buff2, "12345678", 8);
744
745 /*
746 * Read "dir0/dir1/file1"
747 */
748 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
749 assertEqualInt(5, archive_entry_atime(ae));
750 assertEqualInt(5, archive_entry_ctime(ae));
751 assertEqualInt(5, archive_entry_mtime(ae));
752 assertEqualString("dir0/dir1/file1", archive_entry_pathname(ae));
753 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
754 assertEqualInt(1, archive_entry_nlink(ae));
755 assertEqualInt(8, archive_entry_size(ae));
756 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
757 assertEqualMem(buff2, "12345678", 8);
758
759 /*
760 * Read "dir0/dir1/file2"
761 */
762 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
763 assertEqualInt(5, archive_entry_atime(ae));
764 assertEqualInt(5, archive_entry_ctime(ae));
765 assertEqualInt(5, archive_entry_mtime(ae));
766 assertEqualString("dir0/dir1/file2", archive_entry_pathname(ae));
767 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
768 assertEqualInt(1, archive_entry_nlink(ae));
769 assertEqualInt(8, archive_entry_size(ae));
770 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
771 assertEqualMem(buff2, "12345678", 8);
772
773 /*
774 * Read "symlnk"
775 */
776 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
777 assert(archive_entry_atime_is_set(ae));
778 assertEqualInt(5, archive_entry_atime(ae));
779 assert(!archive_entry_birthtime_is_set(ae));
780 assertEqualInt(0, archive_entry_birthtime(ae));
781 assert(archive_entry_ctime_is_set(ae));
782 assertEqualInt(5, archive_entry_ctime(ae));
783 assert(archive_entry_mtime_is_set(ae));
784 assertEqualInt(5, archive_entry_mtime(ae));
785 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
786 assertEqualInt(0, archive_entry_size(ae));
787
788 /*
789 * Verify the end of the archive.
790 */
791 assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
792 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
793 assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
794
795 /*
796 * -----------------------------------------------------------
797 * Now, read the data back without Rockridge and Joliet option
798 * (read ISO9660).
799 * This mode appears rr_moved directory.
800 * -----------------------------------------------------------
801 */
802 assert((a = archive_read_new()) != NULL);
803 assertEqualIntA(a, 0, archive_read_support_format_all(a));
804 assertEqualIntA(a, 0, archive_read_support_filter_all(a));
805 /* Disable Rockridge and Joliet extensions support. */
806 assertEqualInt(ARCHIVE_OK,
807 archive_read_set_option(a, NULL, "rockridge", NULL));
808 assertEqualInt(ARCHIVE_OK,
809 archive_read_set_option(a, NULL, "joliet", NULL));
810 assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used));
811
812 /*
813 * Read Root Directory
814 */
815 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
816 assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae));
817 assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae));
818 assertEqualString(".", archive_entry_pathname(ae));
819 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
820 assertEqualInt(2048, archive_entry_size(ae));
821
822 /*
823 * Read "rr_moved"
824 */
825 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
826 assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae));
827 assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae));
828 assertEqualString("RR_MOVED", archive_entry_pathname(ae));
829 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
830 assertEqualInt(2048, archive_entry_size(ae));
831
832 /*
833 * Read "rr_moved/dir7"
834 */
835 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
836 assertEqualInt(5, archive_entry_atime(ae));
837 assertEqualInt(5, archive_entry_ctime(ae));
838 assertEqualInt(5, archive_entry_mtime(ae));
839 assertEqualString("RR_MOVED/DIR7", archive_entry_pathname(ae));
840 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
841 assertEqualInt(2048, archive_entry_size(ae));
842
843 /*
844 * Read "rr_moved/dir7/dir8"
845 */
846 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
847 assertEqualInt(5, archive_entry_atime(ae));
848 assertEqualInt(5, archive_entry_ctime(ae));
849 assertEqualInt(5, archive_entry_mtime(ae));
850 assertEqualString("RR_MOVED/DIR7/DIR8", archive_entry_pathname(ae));
851 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
852 assertEqualInt(2048, archive_entry_size(ae));
853
854 /*
855 * Read "rr_moved/dir7/dir8/dir9"
856 */
857 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
858 assertEqualInt(5, archive_entry_atime(ae));
859 assertEqualInt(5, archive_entry_ctime(ae));
860 assertEqualInt(5, archive_entry_mtime(ae));
861 assertEqualString("RR_MOVED/DIR7/DIR8/DIR9",
862 archive_entry_pathname(ae));
863 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
864 assertEqualInt(2048, archive_entry_size(ae));
865
866 /*
867 * Read "rr_moved/dir7/dir8/dir9/dira"
868 */
869 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
870 assertEqualInt(5, archive_entry_atime(ae));
871 assertEqualInt(5, archive_entry_ctime(ae));
872 assertEqualInt(5, archive_entry_mtime(ae));
873 assertEqualString("RR_MOVED/DIR7/DIR8/DIR9/DIRA",
874 archive_entry_pathname(ae));
875 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
876 assertEqualInt(2048, archive_entry_size(ae));
877
878 /*
879 * Read "rr_moved/dir7/dir8/dir9/dira/dirB"
880 */
881 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
882 assertEqualInt(5, archive_entry_atime(ae));
883 assertEqualInt(5, archive_entry_ctime(ae));
884 assertEqualInt(5, archive_entry_mtime(ae));
885 assertEqualString("RR_MOVED/DIR7/DIR8/DIR9/DIRA/DIRB",
886 archive_entry_pathname(ae));
887 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
888 assertEqualInt(2048, archive_entry_size(ae));
889
890 /*
891 * Read "rr_moved/dir7/dir8/dir9/dirA/dirB/dirC"
892 */
893 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
894 assertEqualInt(5, archive_entry_atime(ae));
895 assertEqualInt(5, archive_entry_ctime(ae));
896 assertEqualInt(5, archive_entry_mtime(ae));
897 assertEqualString("RR_MOVED/DIR7/DIR8/DIR9/DIRA/DIRB/DIRC",
898 archive_entry_pathname(ae));
899 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
900 assertEqualInt(2048, archive_entry_size(ae));
901
902 /*
903 * Read "dir0"
904 */
905 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
906 assertEqualInt(5, archive_entry_atime(ae));
907 assertEqualInt(5, archive_entry_ctime(ae));
908 assertEqualInt(5, archive_entry_mtime(ae));
909 assertEqualString("DIR0", archive_entry_pathname(ae));
910 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
911 assertEqualInt(2048, archive_entry_size(ae));
912
913 /*
914 * Read "dir0/dir1"
915 */
916 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
917 assertEqualInt(5, archive_entry_atime(ae));
918 assertEqualInt(5, archive_entry_ctime(ae));
919 assertEqualInt(5, archive_entry_mtime(ae));
920 assertEqualString("DIR0/DIR1", archive_entry_pathname(ae));
921 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
922 assertEqualInt(2048, archive_entry_size(ae));
923
924 /*
925 * Read "dir0/dir1/dir2"
926 */
927 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
928 assertEqualInt(5, archive_entry_atime(ae));
929 assertEqualInt(5, archive_entry_ctime(ae));
930 assertEqualInt(5, archive_entry_mtime(ae));
931 assertEqualString("DIR0/DIR1/DIR2", archive_entry_pathname(ae));
932 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
933 assertEqualInt(2048, archive_entry_size(ae));
934
935 /*
936 * Read "dir0/dir1/dir2/dir3"
937 */
938 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
939 assertEqualInt(5, archive_entry_atime(ae));
940 assertEqualInt(5, archive_entry_ctime(ae));
941 assertEqualInt(5, archive_entry_mtime(ae));
942 assertEqualString("DIR0/DIR1/DIR2/DIR3",
943 archive_entry_pathname(ae));
944 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
945 assertEqualInt(2048, archive_entry_size(ae));
946
947 /*
948 * Read "dir0/dir1/dir2/dir3/dir4"
949 */
950 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
951 assertEqualInt(5, archive_entry_atime(ae));
952 assertEqualInt(5, archive_entry_ctime(ae));
953 assertEqualInt(5, archive_entry_mtime(ae));
954 assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4",
955 archive_entry_pathname(ae));
956 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
957 assertEqualInt(2048, archive_entry_size(ae));
958
959 /*
960 * Read "dir0/dir1/dir2/dir3/dir4/dir5"
961 */
962 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
963 assertEqualInt(5, archive_entry_atime(ae));
964 assertEqualInt(5, archive_entry_ctime(ae));
965 assertEqualInt(5, archive_entry_mtime(ae));
966 assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5",
967 archive_entry_pathname(ae));
968 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
969 assertEqualInt(2048, archive_entry_size(ae));
970
971 /*
972 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6"
973 */
974 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
975 assertEqualInt(5, archive_entry_atime(ae));
976 assertEqualInt(5, archive_entry_ctime(ae));
977 assertEqualInt(5, archive_entry_mtime(ae));
978 assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5/DIR6",
979 archive_entry_pathname(ae));
980 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
981 assertEqualInt(2048, archive_entry_size(ae));
982
983 /*
984 * Read "file"
985 */
986 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
987 assertEqualInt(5, archive_entry_atime(ae));
988 assertEqualInt(5, archive_entry_ctime(ae));
989 assertEqualInt(5, archive_entry_mtime(ae));
990 assertEqualString("FILE", archive_entry_pathname(ae));
991 assertEqualString(NULL, archive_entry_hardlink(ae));
992 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
993 assertEqualInt(8, archive_entry_size(ae));
994 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
995 assertEqualMem(buff2, "12345678", 8);
996
997 /*
998 * Read "hardlnk"
999 */
1000 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
1001 assertEqualInt(5, archive_entry_atime(ae));
1002 assertEqualInt(0, archive_entry_birthtime(ae));
1003 assertEqualInt(5, archive_entry_ctime(ae));
1004 assertEqualInt(5, archive_entry_mtime(ae));
1005 assertEqualString("HARDLNK", archive_entry_pathname(ae));
1006 assertEqualString("FILE", archive_entry_hardlink(ae));
1007 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
1008 assertEqualInt(2, archive_entry_nlink(ae));
1009 assertEqualInt(0, archive_entry_size(ae));
1010 assertEqualIntA(a, 0, archive_read_data(a, buff2, 10));
1011
1012
1013 /*
1014 * Read longname
1015 */
1016 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
1017 assert(archive_entry_atime_is_set(ae));
1018 assertEqualInt(5, archive_entry_atime(ae));
1019 assert(archive_entry_ctime_is_set(ae));
1020 assertEqualInt(5, archive_entry_ctime(ae));
1021 assert(archive_entry_mtime_is_set(ae));
1022 assertEqualInt(5, archive_entry_mtime(ae));
1023 assertEqualString("LONGNAME", archive_entry_pathname(ae));
1024 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
1025 assertEqualInt(8, archive_entry_size(ae));
1026 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
1027 assertEqualMem(buff2, "12345678", 8);
1028
1029 /*
1030 * Read "rr_moved/dir7/dir8/dir9/dirA/dirB/dirC/file"
1031 */
1032 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
1033 assertEqualInt(5, archive_entry_atime(ae));
1034 assertEqualInt(5, archive_entry_ctime(ae));
1035 assertEqualInt(5, archive_entry_mtime(ae));
1036 assertEqualString(
1037 "RR_MOVED/DIR7/DIR8/DIR9/DIRA/DIRB/DIRC/FILE",
1038 archive_entry_pathname(ae));
1039 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
1040 assertEqualInt(1, archive_entry_nlink(ae));
1041 assertEqualInt(8, archive_entry_size(ae));
1042 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
1043 assertEqualMem(buff2, "12345678", 8);
1044
1045 /*
1046 * Read "dir0/dir1/file1"
1047 */
1048 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
1049 assertEqualInt(5, archive_entry_atime(ae));
1050 assertEqualInt(5, archive_entry_ctime(ae));
1051 assertEqualInt(5, archive_entry_mtime(ae));
1052 assertEqualString("DIR0/DIR1/FILE1", archive_entry_pathname(ae));
1053 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
1054 assertEqualInt(1, archive_entry_nlink(ae));
1055 assertEqualInt(8, archive_entry_size(ae));
1056 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
1057 assertEqualMem(buff2, "12345678", 8);
1058
1059 /*
1060 * Read "dir0/dir1/file2"
1061 */
1062 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
1063 assertEqualInt(5, archive_entry_atime(ae));
1064 assertEqualInt(5, archive_entry_ctime(ae));
1065 assertEqualInt(5, archive_entry_mtime(ae));
1066 assertEqualString("DIR0/DIR1/FILE2", archive_entry_pathname(ae));
1067 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
1068 assertEqualInt(1, archive_entry_nlink(ae));
1069 assertEqualInt(8, archive_entry_size(ae));
1070 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
1071 assertEqualMem(buff2, "12345678", 8);
1072
1073 /*
1074 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7" as file
1075 */
1076 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
1077 assertEqualInt(5, archive_entry_atime(ae));
1078 assertEqualInt(5, archive_entry_ctime(ae));
1079 assertEqualInt(5, archive_entry_mtime(ae));
1080 assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5/DIR6/DIR7",
1081 archive_entry_pathname(ae));
1082 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
1083 assertEqualInt(0, archive_entry_size(ae));
1084
1085 /*
1086 * Read "symlnk"
1087 */
1088 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
1089 assert(archive_entry_atime_is_set(ae));
1090 assertEqualInt(5, archive_entry_atime(ae));
1091 assert(!archive_entry_birthtime_is_set(ae));
1092 assertEqualInt(0, archive_entry_birthtime(ae));
1093 assert(archive_entry_ctime_is_set(ae));
1094 assertEqualInt(5, archive_entry_ctime(ae));
1095 assert(archive_entry_mtime_is_set(ae));
1096 assertEqualInt(5, archive_entry_mtime(ae));
1097 assertEqualString("SYMLNK", archive_entry_pathname(ae));
1098 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
1099 assertEqualInt(0, archive_entry_size(ae));
1100
1101 /*
1102 * Verify the end of the archive.
1103 */
1104 assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
1105 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
1106 assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
1107
1108 free(buff);
1109 }
1110