2 * Copyright (c) 2003-2008 Tim Kientzle
3 * Copyright (c) 2009,2010 Michihiro NAKAJIMA
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
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.
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.
27 __FBSDID("$FreeBSD$");
30 DEFINE_TEST(test_write_format_iso9660)
32 size_t buffsize = 1000000;
34 struct archive_entry *ae;
39 "longname00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
40 "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
41 "cccccccccccccccccccccccccccccccccccccccccccccccccc"
42 "dddddddddddddddddddddddddddddddddddddddddddddddddd";
47 buff = malloc(buffsize); /* million bytes of work area */
50 /* Create a new archive in memory. */
51 assert((a = archive_write_new()) != NULL);
52 assertA(0 == archive_write_set_format_iso9660(a));
53 assertA(0 == archive_write_add_filter_none(a));
54 assertA(0 == archive_write_open_memory(a, buff, buffsize, &used));
57 * "file" has a bunch of attributes and 8 bytes of data.
59 assert((ae = archive_entry_new()) != NULL);
60 archive_entry_set_atime(ae, 2, 20);
61 archive_entry_set_birthtime(ae, 3, 30);
62 archive_entry_set_ctime(ae, 4, 40);
63 archive_entry_set_mtime(ae, 5, 50);
64 archive_entry_copy_pathname(ae, "file");
65 archive_entry_set_mode(ae, AE_IFREG | 0755);
66 archive_entry_set_size(ae, 8);
67 archive_entry_set_nlink(ae, 2);
68 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
69 archive_entry_free(ae);
70 assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9));
73 * "hardlnk" has linked to "file".
75 assert((ae = archive_entry_new()) != NULL);
76 archive_entry_set_atime(ae, 2, 20);
77 archive_entry_set_birthtime(ae, 3, 30);
78 archive_entry_set_ctime(ae, 4, 40);
79 archive_entry_set_mtime(ae, 5, 50);
80 archive_entry_copy_pathname(ae, "hardlnk");
81 archive_entry_set_mode(ae, AE_IFREG | 0755);
82 archive_entry_set_hardlink(ae, "file");
83 archive_entry_set_nlink(ae, 2);
84 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
85 archive_entry_free(ae);
88 * longname is similar but has birthtime later than mtime.
90 assert((ae = archive_entry_new()) != NULL);
91 archive_entry_set_atime(ae, 2, 20);
92 archive_entry_set_birthtime(ae, 8, 80);
93 archive_entry_set_ctime(ae, 4, 40);
94 archive_entry_set_mtime(ae, 5, 50);
95 archive_entry_copy_pathname(ae, longname);
96 archive_entry_set_mode(ae, AE_IFREG | 0666);
97 archive_entry_set_size(ae, 8);
98 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
99 archive_entry_free(ae);
100 assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9));
103 * "symlnk has symbolic linked to longname.
105 assert((ae = archive_entry_new()) != NULL);
106 archive_entry_set_atime(ae, 2, 20);
107 archive_entry_set_ctime(ae, 4, 40);
108 archive_entry_set_mtime(ae, 5, 50);
109 archive_entry_copy_pathname(ae, "symlnk");
110 archive_entry_set_mode(ae, AE_IFLNK | 0555);
111 archive_entry_set_symlink(ae, longname);
112 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
113 archive_entry_free(ae);
116 * "dir*" has a bunch of attributes.
119 strcpy(dir, "/dir0");
120 for (i = 0; i < 10; i++) {
123 strcat(dirname, dir+1);
125 strcat(dirname, dir);
126 assert((ae = archive_entry_new()) != NULL);
127 archive_entry_set_atime(ae, 2, 20);
128 archive_entry_set_birthtime(ae, 3, 30);
129 archive_entry_set_ctime(ae, 4, 40);
130 archive_entry_set_mtime(ae, 5, 50);
131 archive_entry_copy_pathname(ae, dirname);
132 archive_entry_set_mode(ae, S_IFDIR | 0755);
133 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
134 archive_entry_free(ae);
138 * "dir0/dir1/file1" has 8 bytes of data.
140 assert((ae = archive_entry_new()) != NULL);
141 archive_entry_set_atime(ae, 2, 20);
142 archive_entry_set_birthtime(ae, 3, 30);
143 archive_entry_set_ctime(ae, 4, 40);
144 archive_entry_set_mtime(ae, 5, 50);
145 archive_entry_copy_pathname(ae, "dir0/dir1/file1");
146 archive_entry_set_mode(ae, AE_IFREG | 0755);
147 archive_entry_set_size(ae, 8);
148 archive_entry_set_nlink(ae, 1);
149 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
150 archive_entry_free(ae);
151 assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9));
154 * "dir0/dir1/file2" has 8 bytes of data.
156 assert((ae = archive_entry_new()) != NULL);
157 archive_entry_set_atime(ae, 2, 20);
158 archive_entry_set_birthtime(ae, 3, 30);
159 archive_entry_set_ctime(ae, 4, 40);
160 archive_entry_set_mtime(ae, 5, 50);
161 archive_entry_copy_pathname(ae, "dir0/dir1/file2");
162 archive_entry_set_mode(ae, AE_IFREG | 0755);
163 archive_entry_set_size(ae, 8);
164 archive_entry_set_nlink(ae, 1);
165 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
166 archive_entry_free(ae);
167 assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9));
170 * Add a wrong path "dir0/dir1/file2/wrong"
172 assert((ae = archive_entry_new()) != NULL);
173 archive_entry_set_atime(ae, 2, 20);
174 archive_entry_set_birthtime(ae, 3, 30);
175 archive_entry_set_ctime(ae, 4, 40);
176 archive_entry_set_mtime(ae, 5, 50);
177 archive_entry_copy_pathname(ae, "dir0/dir1/file2/wrong");
178 archive_entry_set_mode(ae, AE_IFREG | 0755);
179 archive_entry_set_size(ae, 8);
180 archive_entry_set_nlink(ae, 1);
181 assertEqualIntA(a, ARCHIVE_FAILED, archive_write_header(a, ae));
182 archive_entry_free(ae);
184 /* Close out the archive. */
185 assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
186 assertEqualIntA(a, ARCHIVE_OK, archive_write_free(a));
189 * -----------------------------------------------------------
190 * Now, read the data back(read Rockridge extensions).
191 * -----------------------------------------------------------
193 assert((a = archive_read_new()) != NULL);
194 assertEqualIntA(a, 0, archive_read_support_format_all(a));
195 assertEqualIntA(a, 0, archive_read_support_filter_all(a));
196 assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used));
199 * Read Root Directory
201 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
202 assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae));
203 assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae));
204 assertEqualString(".", archive_entry_pathname(ae));
205 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
206 assertEqualInt(2048, archive_entry_size(ae));
211 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
212 assertEqualInt(2, archive_entry_atime(ae));
213 assertEqualInt(3, archive_entry_birthtime(ae));
214 assertEqualInt(4, archive_entry_ctime(ae));
215 assertEqualInt(5, archive_entry_mtime(ae));
216 assertEqualString("dir0", archive_entry_pathname(ae));
217 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
218 assertEqualInt(2048, archive_entry_size(ae));
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/dir1", archive_entry_pathname(ae));
229 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
230 assertEqualInt(2048, archive_entry_size(ae));
233 * Read "dir0/dir1/dir2"
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/dir2", archive_entry_pathname(ae));
241 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
242 assertEqualInt(2048, archive_entry_size(ae));
245 * Read "dir0/dir1/dir2/dir3"
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/dir3",
253 archive_entry_pathname(ae));
254 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
255 assertEqualInt(2048, archive_entry_size(ae));
258 * Read "dir0/dir1/dir2/dir3/dir4"
260 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
261 assertEqualInt(2, archive_entry_atime(ae));
262 assertEqualInt(3, archive_entry_birthtime(ae));
263 assertEqualInt(4, archive_entry_ctime(ae));
264 assertEqualInt(5, archive_entry_mtime(ae));
265 assertEqualString("dir0/dir1/dir2/dir3/dir4",
266 archive_entry_pathname(ae));
267 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
268 assertEqualInt(2048, archive_entry_size(ae));
271 * Read "dir0/dir1/dir2/dir3/dir4/dir5"
273 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
274 assertEqualInt(2, archive_entry_atime(ae));
275 assertEqualInt(3, archive_entry_birthtime(ae));
276 assertEqualInt(4, archive_entry_ctime(ae));
277 assertEqualInt(5, archive_entry_mtime(ae));
278 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5",
279 archive_entry_pathname(ae));
280 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
281 assertEqualInt(2048, archive_entry_size(ae));
284 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6"
286 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
287 assertEqualInt(2, archive_entry_atime(ae));
288 assertEqualInt(3, archive_entry_birthtime(ae));
289 assertEqualInt(4, archive_entry_ctime(ae));
290 assertEqualInt(5, archive_entry_mtime(ae));
291 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6",
292 archive_entry_pathname(ae));
293 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
294 assertEqualInt(2048, archive_entry_size(ae));
297 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7"
299 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
300 assertEqualInt(2, archive_entry_atime(ae));
301 assertEqualInt(3, archive_entry_birthtime(ae));
302 assertEqualInt(4, archive_entry_ctime(ae));
303 assertEqualInt(5, archive_entry_mtime(ae));
304 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7",
305 archive_entry_pathname(ae));
306 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
307 assertEqualInt(2048, archive_entry_size(ae));
310 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8"
312 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
313 assertEqualInt(2, archive_entry_atime(ae));
314 assertEqualInt(3, archive_entry_birthtime(ae));
315 assertEqualInt(4, archive_entry_ctime(ae));
316 assertEqualInt(5, archive_entry_mtime(ae));
317 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8",
318 archive_entry_pathname(ae));
319 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
320 assertEqualInt(2048, archive_entry_size(ae));
323 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9"
325 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
326 assertEqualInt(2, archive_entry_atime(ae));
327 assertEqualInt(3, archive_entry_birthtime(ae));
328 assertEqualInt(4, archive_entry_ctime(ae));
329 assertEqualInt(5, archive_entry_mtime(ae));
330 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9",
331 archive_entry_pathname(ae));
332 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
333 assertEqualInt(2048, archive_entry_size(ae));
338 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
339 assertEqualInt(2, archive_entry_atime(ae));
340 assertEqualInt(3, archive_entry_birthtime(ae));
341 assertEqualInt(4, archive_entry_ctime(ae));
342 assertEqualInt(5, archive_entry_mtime(ae));
343 assertEqualString("hardlnk", archive_entry_pathname(ae));
344 assert((AE_IFREG | 0555) == archive_entry_mode(ae));
345 assertEqualInt(2, archive_entry_nlink(ae));
346 assertEqualInt(8, archive_entry_size(ae));
347 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
348 assertEqualMem(buff2, "12345678", 8);
353 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
354 assertEqualInt(2, archive_entry_atime(ae));
355 assertEqualInt(3, archive_entry_birthtime(ae));
356 assertEqualInt(4, archive_entry_ctime(ae));
357 assertEqualInt(5, archive_entry_mtime(ae));
358 assertEqualString("file", archive_entry_pathname(ae));
359 assertEqualString("hardlnk", archive_entry_hardlink(ae));
360 assert((AE_IFREG | 0555) == archive_entry_mode(ae));
361 assertEqualInt(2, archive_entry_nlink(ae));
362 assertEqualInt(0, archive_entry_size(ae));
367 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
368 assert(archive_entry_atime_is_set(ae));
369 assertEqualInt(2, archive_entry_atime(ae));
370 /* Birthtime > mtime above, so it doesn't get stored at all. */
371 assert(!archive_entry_birthtime_is_set(ae));
372 assertEqualInt(0, archive_entry_birthtime(ae));
373 assert(archive_entry_ctime_is_set(ae));
374 assertEqualInt(4, archive_entry_ctime(ae));
375 assert(archive_entry_mtime_is_set(ae));
376 assertEqualInt(5, archive_entry_mtime(ae));
377 assertEqualString(longname, archive_entry_pathname(ae));
378 #if !defined(_WIN32) && !defined(__CYGWIN__)
379 assert((AE_IFREG | 0444) == archive_entry_mode(ae));
381 /* On Windows and CYGWIN, always set all exec bit ON by default. */
382 assert((AE_IFREG | 0555) == archive_entry_mode(ae));
384 assertEqualInt(8, archive_entry_size(ae));
385 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
386 assertEqualMem(buff2, "12345678", 8);
389 * Read "dir0/dir1/file1"
391 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
392 assertEqualInt(2, archive_entry_atime(ae));
393 assertEqualInt(3, archive_entry_birthtime(ae));
394 assertEqualInt(4, archive_entry_ctime(ae));
395 assertEqualInt(5, archive_entry_mtime(ae));
396 assertEqualString("dir0/dir1/file1", archive_entry_pathname(ae));
397 assert((AE_IFREG | 0555) == archive_entry_mode(ae));
398 assertEqualInt(1, archive_entry_nlink(ae));
399 assertEqualInt(8, archive_entry_size(ae));
400 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
401 assertEqualMem(buff2, "12345678", 8);
404 * Read "dir0/dir1/file2"
406 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
407 assertEqualInt(2, archive_entry_atime(ae));
408 assertEqualInt(3, archive_entry_birthtime(ae));
409 assertEqualInt(4, archive_entry_ctime(ae));
410 assertEqualInt(5, archive_entry_mtime(ae));
411 assertEqualString("dir0/dir1/file2", archive_entry_pathname(ae));
412 assert((AE_IFREG | 0555) == archive_entry_mode(ae));
413 assertEqualInt(1, archive_entry_nlink(ae));
414 assertEqualInt(8, archive_entry_size(ae));
415 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
416 assertEqualMem(buff2, "12345678", 8);
421 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
422 assert(archive_entry_atime_is_set(ae));
423 assertEqualInt(2, archive_entry_atime(ae));
424 assert(!archive_entry_birthtime_is_set(ae));
425 assertEqualInt(0, archive_entry_birthtime(ae));
426 assert(archive_entry_ctime_is_set(ae));
427 assertEqualInt(4, archive_entry_ctime(ae));
428 assert(archive_entry_mtime_is_set(ae));
429 assertEqualInt(5, archive_entry_mtime(ae));
430 assertEqualString("symlnk", archive_entry_pathname(ae));
431 assert((AE_IFLNK | 0555) == archive_entry_mode(ae));
432 assertEqualString(longname, archive_entry_symlink(ae));
435 * Verify the end of the archive.
437 assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
438 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
439 assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
442 * -----------------------------------------------------------
443 * Now, read the data back without Rockridge option
444 * (read Joliet extensions).
445 * -----------------------------------------------------------
447 assert((a = archive_read_new()) != NULL);
448 assertEqualIntA(a, 0, archive_read_support_format_all(a));
449 assertEqualIntA(a, 0, archive_read_support_filter_all(a));
450 /* Disable Rockridge extensions support. */
451 assertEqualInt(ARCHIVE_OK,
452 archive_read_set_option(a, NULL, "rockridge", NULL));
453 assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used));
456 * Read Root Directory
458 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
459 assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae));
460 assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae));
461 assertEqualString(".", archive_entry_pathname(ae));
462 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
463 assertEqualInt(2048, archive_entry_size(ae));
468 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
469 assertEqualInt(5, archive_entry_atime(ae));
470 assertEqualInt(5, archive_entry_ctime(ae));
471 assertEqualInt(5, archive_entry_mtime(ae));
472 assertEqualString("dir0", archive_entry_pathname(ae));
473 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
474 assertEqualInt(2048, archive_entry_size(ae));
479 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
480 assertEqualInt(5, archive_entry_atime(ae));
481 assertEqualInt(5, archive_entry_ctime(ae));
482 assertEqualInt(5, archive_entry_mtime(ae));
483 assertEqualString("dir0/dir1", archive_entry_pathname(ae));
484 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
485 assertEqualInt(2048, archive_entry_size(ae));
488 * Read "dir0/dir1/dir2"
490 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
491 assertEqualInt(5, archive_entry_atime(ae));
492 assertEqualInt(5, archive_entry_ctime(ae));
493 assertEqualInt(5, archive_entry_mtime(ae));
494 assertEqualString("dir0/dir1/dir2", archive_entry_pathname(ae));
495 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
496 assertEqualInt(2048, archive_entry_size(ae));
499 * Read "dir0/dir1/dir2/dir3"
501 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
502 assertEqualInt(5, archive_entry_atime(ae));
503 assertEqualInt(5, archive_entry_ctime(ae));
504 assertEqualInt(5, archive_entry_mtime(ae));
505 assertEqualString("dir0/dir1/dir2/dir3",
506 archive_entry_pathname(ae));
507 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
508 assertEqualInt(2048, archive_entry_size(ae));
511 * Read "dir0/dir1/dir2/dir3/dir4"
513 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
514 assertEqualInt(5, archive_entry_atime(ae));
515 assertEqualInt(5, archive_entry_ctime(ae));
516 assertEqualInt(5, archive_entry_mtime(ae));
517 assertEqualString("dir0/dir1/dir2/dir3/dir4",
518 archive_entry_pathname(ae));
519 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
520 assertEqualInt(2048, archive_entry_size(ae));
523 * Read "dir0/dir1/dir2/dir3/dir4/dir5"
525 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
526 assertEqualInt(5, archive_entry_atime(ae));
527 assertEqualInt(5, archive_entry_ctime(ae));
528 assertEqualInt(5, archive_entry_mtime(ae));
529 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5",
530 archive_entry_pathname(ae));
531 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
532 assertEqualInt(2048, archive_entry_size(ae));
535 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6"
537 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
538 assertEqualInt(5, archive_entry_atime(ae));
539 assertEqualInt(5, archive_entry_ctime(ae));
540 assertEqualInt(5, archive_entry_mtime(ae));
541 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6",
542 archive_entry_pathname(ae));
543 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
544 assertEqualInt(2048, archive_entry_size(ae));
547 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7"
549 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
550 assertEqualInt(5, archive_entry_atime(ae));
551 assertEqualInt(5, archive_entry_ctime(ae));
552 assertEqualInt(5, archive_entry_mtime(ae));
553 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7",
554 archive_entry_pathname(ae));
555 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
556 assertEqualInt(2048, archive_entry_size(ae));
559 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8"
561 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
562 assertEqualInt(5, archive_entry_atime(ae));
563 assertEqualInt(5, archive_entry_ctime(ae));
564 assertEqualInt(5, archive_entry_mtime(ae));
565 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8",
566 archive_entry_pathname(ae));
567 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
568 assertEqualInt(2048, archive_entry_size(ae));
571 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9"
573 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
574 assertEqualInt(5, archive_entry_atime(ae));
575 assertEqualInt(5, archive_entry_ctime(ae));
576 assertEqualInt(5, archive_entry_mtime(ae));
577 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9",
578 archive_entry_pathname(ae));
579 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
580 assertEqualInt(2048, archive_entry_size(ae));
585 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
586 assertEqualInt(5, archive_entry_atime(ae));
587 assertEqualInt(5, archive_entry_ctime(ae));
588 assertEqualInt(5, archive_entry_mtime(ae));
589 assertEqualString("hardlnk", archive_entry_pathname(ae));
590 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
591 assertEqualInt(2, archive_entry_nlink(ae));
592 assertEqualInt(8, archive_entry_size(ae));
593 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
594 assertEqualMem(buff2, "12345678", 8);
599 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
600 assertEqualInt(5, archive_entry_atime(ae));
601 assertEqualInt(5, archive_entry_ctime(ae));
602 assertEqualInt(5, archive_entry_mtime(ae));
603 assertEqualString("file", archive_entry_pathname(ae));
604 assertEqualString("hardlnk", archive_entry_hardlink(ae));
605 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
606 assertEqualInt(0, archive_entry_size(ae));
607 assertEqualIntA(a, 0, archive_read_data(a, buff2, 10));
612 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
613 assert(archive_entry_atime_is_set(ae));
614 assertEqualInt(5, archive_entry_atime(ae));
615 assert(archive_entry_ctime_is_set(ae));
616 assertEqualInt(5, archive_entry_ctime(ae));
617 assert(archive_entry_mtime_is_set(ae));
618 assertEqualInt(5, archive_entry_mtime(ae));
619 /* Trim lngname to 64 characters. */
621 assertEqualString(longname, archive_entry_pathname(ae));
622 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
623 assertEqualInt(8, archive_entry_size(ae));
624 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
625 assertEqualMem(buff2, "12345678", 8);
628 * Read "dir0/dir1/file1"
630 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
631 assertEqualInt(5, archive_entry_atime(ae));
632 assertEqualInt(5, archive_entry_ctime(ae));
633 assertEqualInt(5, archive_entry_mtime(ae));
634 assertEqualString("dir0/dir1/file1", archive_entry_pathname(ae));
635 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
636 assertEqualInt(1, archive_entry_nlink(ae));
637 assertEqualInt(8, archive_entry_size(ae));
638 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
639 assertEqualMem(buff2, "12345678", 8);
642 * Read "dir0/dir1/file2"
644 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
645 assertEqualInt(5, archive_entry_atime(ae));
646 assertEqualInt(5, archive_entry_ctime(ae));
647 assertEqualInt(5, archive_entry_mtime(ae));
648 assertEqualString("dir0/dir1/file2", archive_entry_pathname(ae));
649 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
650 assertEqualInt(1, archive_entry_nlink(ae));
651 assertEqualInt(8, archive_entry_size(ae));
652 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
653 assertEqualMem(buff2, "12345678", 8);
658 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
659 assert(archive_entry_atime_is_set(ae));
660 assertEqualInt(5, archive_entry_atime(ae));
661 assert(!archive_entry_birthtime_is_set(ae));
662 assertEqualInt(0, archive_entry_birthtime(ae));
663 assert(archive_entry_ctime_is_set(ae));
664 assertEqualInt(5, archive_entry_ctime(ae));
665 assert(archive_entry_mtime_is_set(ae));
666 assertEqualInt(5, archive_entry_mtime(ae));
667 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
668 assertEqualInt(0, archive_entry_size(ae));
671 * Verify the end of the archive.
673 assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
674 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
675 assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
678 * -----------------------------------------------------------
679 * Now, read the data back without Rockridge and Joliet option
681 * This mode appears rr_moved directory.
682 * -----------------------------------------------------------
684 assert((a = archive_read_new()) != NULL);
685 assertEqualIntA(a, 0, archive_read_support_format_all(a));
686 assertEqualIntA(a, 0, archive_read_support_filter_all(a));
687 /* Disable Rockridge and Joliet extensions support. */
688 assertEqualInt(ARCHIVE_OK,
689 archive_read_set_option(a, NULL, "rockridge", NULL));
690 assertEqualInt(ARCHIVE_OK,
691 archive_read_set_option(a, NULL, "joliet", NULL));
692 assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used));
695 * Read Root Directory
697 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
698 assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae));
699 assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae));
700 assertEqualString(".", archive_entry_pathname(ae));
701 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
702 assertEqualInt(2048, archive_entry_size(ae));
707 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
708 assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae));
709 assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae));
710 assertEqualString("RR_MOVED", archive_entry_pathname(ae));
711 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
712 assertEqualInt(2048, archive_entry_size(ae));
715 * Read "rr_moved/dir7"
717 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
718 assertEqualInt(5, archive_entry_atime(ae));
719 assertEqualInt(5, archive_entry_ctime(ae));
720 assertEqualInt(5, archive_entry_mtime(ae));
721 assertEqualString("RR_MOVED/DIR7", archive_entry_pathname(ae));
722 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
723 assertEqualInt(2048, archive_entry_size(ae));
726 * Read "rr_moved/dir7/dir8"
728 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
729 assertEqualInt(5, archive_entry_atime(ae));
730 assertEqualInt(5, archive_entry_ctime(ae));
731 assertEqualInt(5, archive_entry_mtime(ae));
732 assertEqualString("RR_MOVED/DIR7/DIR8", archive_entry_pathname(ae));
733 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
734 assertEqualInt(2048, archive_entry_size(ae));
737 * Read "rr_moved/dir7/dir8/dir9"
739 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
740 assertEqualInt(5, archive_entry_atime(ae));
741 assertEqualInt(5, archive_entry_ctime(ae));
742 assertEqualInt(5, archive_entry_mtime(ae));
743 assertEqualString("RR_MOVED/DIR7/DIR8/DIR9",
744 archive_entry_pathname(ae));
745 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
746 assertEqualInt(2048, archive_entry_size(ae));
751 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
752 assertEqualInt(5, archive_entry_atime(ae));
753 assertEqualInt(5, archive_entry_ctime(ae));
754 assertEqualInt(5, archive_entry_mtime(ae));
755 assertEqualString("DIR0", archive_entry_pathname(ae));
756 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
757 assertEqualInt(2048, archive_entry_size(ae));
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", archive_entry_pathname(ae));
767 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
768 assertEqualInt(2048, archive_entry_size(ae));
771 * Read "dir0/dir1/dir2"
773 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
774 assertEqualInt(5, archive_entry_atime(ae));
775 assertEqualInt(5, archive_entry_ctime(ae));
776 assertEqualInt(5, archive_entry_mtime(ae));
777 assertEqualString("DIR0/DIR1/DIR2", archive_entry_pathname(ae));
778 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
779 assertEqualInt(2048, archive_entry_size(ae));
782 * Read "dir0/dir1/dir2/dir3"
784 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
785 assertEqualInt(5, archive_entry_atime(ae));
786 assertEqualInt(5, archive_entry_ctime(ae));
787 assertEqualInt(5, archive_entry_mtime(ae));
788 assertEqualString("DIR0/DIR1/DIR2/DIR3",
789 archive_entry_pathname(ae));
790 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
791 assertEqualInt(2048, archive_entry_size(ae));
794 * Read "dir0/dir1/dir2/dir3/dir4"
796 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
797 assertEqualInt(5, archive_entry_atime(ae));
798 assertEqualInt(5, archive_entry_ctime(ae));
799 assertEqualInt(5, archive_entry_mtime(ae));
800 assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4",
801 archive_entry_pathname(ae));
802 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
803 assertEqualInt(2048, archive_entry_size(ae));
806 * Read "dir0/dir1/dir2/dir3/dir4/dir5"
808 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
809 assertEqualInt(5, archive_entry_atime(ae));
810 assertEqualInt(5, archive_entry_ctime(ae));
811 assertEqualInt(5, archive_entry_mtime(ae));
812 assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5",
813 archive_entry_pathname(ae));
814 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
815 assertEqualInt(2048, archive_entry_size(ae));
818 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6"
820 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
821 assertEqualInt(5, archive_entry_atime(ae));
822 assertEqualInt(5, archive_entry_ctime(ae));
823 assertEqualInt(5, archive_entry_mtime(ae));
824 assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5/DIR6",
825 archive_entry_pathname(ae));
826 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
827 assertEqualInt(2048, archive_entry_size(ae));
832 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
833 assertEqualInt(5, archive_entry_atime(ae));
834 assertEqualInt(0, archive_entry_birthtime(ae));
835 assertEqualInt(5, archive_entry_ctime(ae));
836 assertEqualInt(5, archive_entry_mtime(ae));
837 assertEqualString("FILE", archive_entry_pathname(ae));
838 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
839 assertEqualInt(2, archive_entry_nlink(ae));
840 assertEqualInt(8, archive_entry_size(ae));
841 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
842 assertEqualMem(buff2, "12345678", 8);
847 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
848 assertEqualInt(5, archive_entry_atime(ae));
849 assertEqualInt(5, archive_entry_ctime(ae));
850 assertEqualInt(5, archive_entry_mtime(ae));
851 assertEqualString("HARDLNK", archive_entry_pathname(ae));
852 assertEqualString("FILE", archive_entry_hardlink(ae));
853 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
854 assertEqualInt(0, archive_entry_size(ae));
855 assertEqualIntA(a, 0, archive_read_data(a, buff2, 10));
860 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
861 assert(archive_entry_atime_is_set(ae));
862 assertEqualInt(5, archive_entry_atime(ae));
863 assert(archive_entry_ctime_is_set(ae));
864 assertEqualInt(5, archive_entry_ctime(ae));
865 assert(archive_entry_mtime_is_set(ae));
866 assertEqualInt(5, archive_entry_mtime(ae));
867 assertEqualString("LONGNAME", archive_entry_pathname(ae));
868 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
869 assertEqualInt(8, archive_entry_size(ae));
870 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
871 assertEqualMem(buff2, "12345678", 8);
874 * Read "dir0/dir1/file1"
876 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
877 assertEqualInt(5, archive_entry_atime(ae));
878 assertEqualInt(5, archive_entry_ctime(ae));
879 assertEqualInt(5, archive_entry_mtime(ae));
880 assertEqualString("DIR0/DIR1/FILE1", archive_entry_pathname(ae));
881 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
882 assertEqualInt(1, archive_entry_nlink(ae));
883 assertEqualInt(8, archive_entry_size(ae));
884 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
885 assertEqualMem(buff2, "12345678", 8);
888 * Read "dir0/dir1/file2"
890 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
891 assertEqualInt(5, archive_entry_atime(ae));
892 assertEqualInt(5, archive_entry_ctime(ae));
893 assertEqualInt(5, archive_entry_mtime(ae));
894 assertEqualString("DIR0/DIR1/FILE2", archive_entry_pathname(ae));
895 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
896 assertEqualInt(1, archive_entry_nlink(ae));
897 assertEqualInt(8, archive_entry_size(ae));
898 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
899 assertEqualMem(buff2, "12345678", 8);
902 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7" as file
904 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
905 assertEqualInt(5, archive_entry_atime(ae));
906 assertEqualInt(5, archive_entry_ctime(ae));
907 assertEqualInt(5, archive_entry_mtime(ae));
908 assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5/DIR6/DIR7",
909 archive_entry_pathname(ae));
910 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
911 assertEqualInt(0, archive_entry_size(ae));
916 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
917 assert(archive_entry_atime_is_set(ae));
918 assertEqualInt(5, archive_entry_atime(ae));
919 assert(!archive_entry_birthtime_is_set(ae));
920 assertEqualInt(0, archive_entry_birthtime(ae));
921 assert(archive_entry_ctime_is_set(ae));
922 assertEqualInt(5, archive_entry_ctime(ae));
923 assert(archive_entry_mtime_is_set(ae));
924 assertEqualInt(5, archive_entry_mtime(ae));
925 assertEqualString("SYMLNK", archive_entry_pathname(ae));
926 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
927 assertEqualInt(0, archive_entry_size(ae));
930 * Verify the end of the archive.
932 assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
933 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
934 assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));