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$");
29 static char buff2[64];
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 < 13; i++) {
121 dir[4] = "0123456789ABCDEF"[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);
137 strcat(dirname, "/file");
138 assert((ae = archive_entry_new()) != NULL);
139 archive_entry_set_atime(ae, 2, 20);
140 archive_entry_set_birthtime(ae, 3, 30);
141 archive_entry_set_ctime(ae, 4, 40);
142 archive_entry_set_mtime(ae, 5, 50);
143 archive_entry_copy_pathname(ae, dirname);
144 archive_entry_set_mode(ae, S_IFREG | 0755);
145 archive_entry_set_size(ae, 8);
146 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
147 archive_entry_free(ae);
148 assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9));
151 * "dir0/dir1/file1" has 8 bytes of data.
153 assert((ae = archive_entry_new()) != NULL);
154 archive_entry_set_atime(ae, 2, 20);
155 archive_entry_set_birthtime(ae, 3, 30);
156 archive_entry_set_ctime(ae, 4, 40);
157 archive_entry_set_mtime(ae, 5, 50);
158 archive_entry_copy_pathname(ae, "dir0/dir1/file1");
159 archive_entry_set_mode(ae, AE_IFREG | 0755);
160 archive_entry_set_size(ae, 8);
161 archive_entry_set_nlink(ae, 1);
162 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
163 archive_entry_free(ae);
164 assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9));
167 * "dir0/dir1/file2" has 8 bytes of data.
169 assert((ae = archive_entry_new()) != NULL);
170 archive_entry_set_atime(ae, 2, 20);
171 archive_entry_set_birthtime(ae, 3, 30);
172 archive_entry_set_ctime(ae, 4, 40);
173 archive_entry_set_mtime(ae, 5, 50);
174 archive_entry_copy_pathname(ae, "dir0/dir1/file2");
175 archive_entry_set_mode(ae, AE_IFREG | 0755);
176 archive_entry_set_size(ae, 8);
177 archive_entry_set_nlink(ae, 1);
178 assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
179 archive_entry_free(ae);
180 assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9));
183 * Add a wrong path "dir0/dir1/file2/wrong"
185 assert((ae = archive_entry_new()) != NULL);
186 archive_entry_set_atime(ae, 2, 20);
187 archive_entry_set_birthtime(ae, 3, 30);
188 archive_entry_set_ctime(ae, 4, 40);
189 archive_entry_set_mtime(ae, 5, 50);
190 archive_entry_copy_pathname(ae, "dir0/dir1/file2/wrong");
191 archive_entry_set_mode(ae, AE_IFREG | 0755);
192 archive_entry_set_size(ae, 8);
193 archive_entry_set_nlink(ae, 1);
194 assertEqualIntA(a, ARCHIVE_FAILED, archive_write_header(a, ae));
195 archive_entry_free(ae);
197 /* Close out the archive. */
198 assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
199 assertEqualIntA(a, ARCHIVE_OK, archive_write_free(a));
202 * -----------------------------------------------------------
203 * Now, read the data back(read Rockridge extensions).
204 * -----------------------------------------------------------
206 assert((a = archive_read_new()) != NULL);
207 assertEqualIntA(a, 0, archive_read_support_format_all(a));
208 assertEqualIntA(a, 0, archive_read_support_filter_all(a));
209 assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used));
212 * Read Root Directory
214 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
215 assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae));
216 assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae));
217 assertEqualString(".", archive_entry_pathname(ae));
218 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
219 assertEqualInt(2048, archive_entry_size(ae));
224 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
225 assertEqualInt(2, archive_entry_atime(ae));
226 assertEqualInt(3, archive_entry_birthtime(ae));
227 assertEqualInt(4, archive_entry_ctime(ae));
228 assertEqualInt(5, archive_entry_mtime(ae));
229 assertEqualString("dir0", archive_entry_pathname(ae));
230 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
231 assertEqualInt(2048, archive_entry_size(ae));
236 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
237 assertEqualInt(2, archive_entry_atime(ae));
238 assertEqualInt(3, archive_entry_birthtime(ae));
239 assertEqualInt(4, archive_entry_ctime(ae));
240 assertEqualInt(5, archive_entry_mtime(ae));
241 assertEqualString("dir0/dir1", archive_entry_pathname(ae));
242 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
243 assertEqualInt(2048, archive_entry_size(ae));
246 * Read "dir0/dir1/dir2"
248 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
249 assertEqualInt(2, archive_entry_atime(ae));
250 assertEqualInt(3, archive_entry_birthtime(ae));
251 assertEqualInt(4, archive_entry_ctime(ae));
252 assertEqualInt(5, archive_entry_mtime(ae));
253 assertEqualString("dir0/dir1/dir2", 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"
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",
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"
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",
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"
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",
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"
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",
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"
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",
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"
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",
331 archive_entry_pathname(ae));
332 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
333 assertEqualInt(2048, archive_entry_size(ae));
336 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9"
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("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9",
344 archive_entry_pathname(ae));
345 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
346 assertEqualInt(2048, archive_entry_size(ae));
349 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA"
351 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
352 assertEqualInt(2, archive_entry_atime(ae));
353 assertEqualInt(3, archive_entry_birthtime(ae));
354 assertEqualInt(4, archive_entry_ctime(ae));
355 assertEqualInt(5, archive_entry_mtime(ae));
356 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA",
357 archive_entry_pathname(ae));
358 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
359 assertEqualInt(2048, archive_entry_size(ae));
362 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB"
364 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
365 assertEqualInt(2, archive_entry_atime(ae));
366 assertEqualInt(3, archive_entry_birthtime(ae));
367 assertEqualInt(4, archive_entry_ctime(ae));
368 assertEqualInt(5, archive_entry_mtime(ae));
369 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB",
370 archive_entry_pathname(ae));
371 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
372 assertEqualInt(2048, archive_entry_size(ae));
375 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC"
377 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
378 assertEqualInt(2, archive_entry_atime(ae));
379 assertEqualInt(3, archive_entry_birthtime(ae));
380 assertEqualInt(4, archive_entry_ctime(ae));
381 assertEqualInt(5, archive_entry_mtime(ae));
382 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC",
383 archive_entry_pathname(ae));
384 assert((S_IFDIR | 0555) == archive_entry_mode(ae));
385 assertEqualInt(2048, archive_entry_size(ae));
390 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
391 assertEqualInt(2, archive_entry_atime(ae));
392 assertEqualInt(3, archive_entry_birthtime(ae));
393 assertEqualInt(4, archive_entry_ctime(ae));
394 assertEqualInt(5, archive_entry_mtime(ae));
395 assertEqualString("hardlnk", archive_entry_pathname(ae));
396 assert((AE_IFREG | 0555) == archive_entry_mode(ae));
397 assertEqualInt(2, archive_entry_nlink(ae));
398 assertEqualInt(8, archive_entry_size(ae));
399 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
400 assertEqualMem(buff2, "12345678", 8);
405 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
406 assertEqualInt(2, archive_entry_atime(ae));
407 assertEqualInt(3, archive_entry_birthtime(ae));
408 assertEqualInt(4, archive_entry_ctime(ae));
409 assertEqualInt(5, archive_entry_mtime(ae));
410 assertEqualString("file", archive_entry_pathname(ae));
411 assertEqualString("hardlnk", archive_entry_hardlink(ae));
412 assert((AE_IFREG | 0555) == archive_entry_mode(ae));
413 assertEqualInt(2, archive_entry_nlink(ae));
414 assertEqualInt(0, archive_entry_size(ae));
419 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
420 assert(archive_entry_atime_is_set(ae));
421 assertEqualInt(2, archive_entry_atime(ae));
422 /* Birthtime > mtime above, so it doesn't get stored at all. */
423 assert(!archive_entry_birthtime_is_set(ae));
424 assertEqualInt(0, archive_entry_birthtime(ae));
425 assert(archive_entry_ctime_is_set(ae));
426 assertEqualInt(4, archive_entry_ctime(ae));
427 assert(archive_entry_mtime_is_set(ae));
428 assertEqualInt(5, archive_entry_mtime(ae));
429 assertEqualString(longname, archive_entry_pathname(ae));
430 #if !defined(_WIN32) && !defined(__CYGWIN__)
431 assert((AE_IFREG | 0444) == archive_entry_mode(ae));
433 /* On Windows and CYGWIN, always set all exec bit ON by default. */
434 assert((AE_IFREG | 0555) == archive_entry_mode(ae));
436 assertEqualInt(8, archive_entry_size(ae));
437 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
438 assertEqualMem(buff2, "12345678", 8);
441 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC/file"
443 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
444 assertEqualInt(2, archive_entry_atime(ae));
445 assertEqualInt(3, archive_entry_birthtime(ae));
446 assertEqualInt(4, archive_entry_ctime(ae));
447 assertEqualInt(5, archive_entry_mtime(ae));
448 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC/file", archive_entry_pathname(ae));
449 assert((AE_IFREG | 0555) == archive_entry_mode(ae));
450 assertEqualInt(1, archive_entry_nlink(ae));
451 assertEqualInt(8, archive_entry_size(ae));
452 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
453 assertEqualMem(buff2, "12345678", 8);
456 * Read "dir0/dir1/file1"
458 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
459 assertEqualInt(2, archive_entry_atime(ae));
460 assertEqualInt(3, archive_entry_birthtime(ae));
461 assertEqualInt(4, archive_entry_ctime(ae));
462 assertEqualInt(5, archive_entry_mtime(ae));
463 assertEqualString("dir0/dir1/file1", archive_entry_pathname(ae));
464 assert((AE_IFREG | 0555) == archive_entry_mode(ae));
465 assertEqualInt(1, archive_entry_nlink(ae));
466 assertEqualInt(8, archive_entry_size(ae));
467 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
468 assertEqualMem(buff2, "12345678", 8);
471 * Read "dir0/dir1/file2"
473 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
474 assertEqualInt(2, archive_entry_atime(ae));
475 assertEqualInt(3, archive_entry_birthtime(ae));
476 assertEqualInt(4, archive_entry_ctime(ae));
477 assertEqualInt(5, archive_entry_mtime(ae));
478 assertEqualString("dir0/dir1/file2", archive_entry_pathname(ae));
479 assert((AE_IFREG | 0555) == archive_entry_mode(ae));
480 assertEqualInt(1, archive_entry_nlink(ae));
481 assertEqualInt(8, archive_entry_size(ae));
482 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
483 assertEqualMem(buff2, "12345678", 8);
488 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
489 assert(archive_entry_atime_is_set(ae));
490 assertEqualInt(2, archive_entry_atime(ae));
491 assert(!archive_entry_birthtime_is_set(ae));
492 assertEqualInt(0, archive_entry_birthtime(ae));
493 assert(archive_entry_ctime_is_set(ae));
494 assertEqualInt(4, archive_entry_ctime(ae));
495 assert(archive_entry_mtime_is_set(ae));
496 assertEqualInt(5, archive_entry_mtime(ae));
497 assertEqualString("symlnk", archive_entry_pathname(ae));
498 assert((AE_IFLNK | 0555) == archive_entry_mode(ae));
499 assertEqualString(longname, archive_entry_symlink(ae));
502 * Verify the end of the archive.
504 assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
505 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
506 assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
509 * -----------------------------------------------------------
510 * Now, read the data back without Rockridge option
511 * (read Joliet extensions).
512 * -----------------------------------------------------------
514 assert((a = archive_read_new()) != NULL);
515 assertEqualIntA(a, 0, archive_read_support_format_all(a));
516 assertEqualIntA(a, 0, archive_read_support_filter_all(a));
517 /* Disable Rockridge extensions support. */
518 assertEqualInt(ARCHIVE_OK,
519 archive_read_set_option(a, NULL, "rockridge", NULL));
520 assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used));
523 * Read Root Directory
525 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
526 assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae));
527 assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae));
528 assertEqualString(".", archive_entry_pathname(ae));
529 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
530 assertEqualInt(2048, archive_entry_size(ae));
535 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
536 assertEqualInt(5, archive_entry_atime(ae));
537 assertEqualInt(5, archive_entry_ctime(ae));
538 assertEqualInt(5, archive_entry_mtime(ae));
539 assertEqualString("dir0", archive_entry_pathname(ae));
540 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
541 assertEqualInt(2048, archive_entry_size(ae));
546 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
547 assertEqualInt(5, archive_entry_atime(ae));
548 assertEqualInt(5, archive_entry_ctime(ae));
549 assertEqualInt(5, archive_entry_mtime(ae));
550 assertEqualString("dir0/dir1", archive_entry_pathname(ae));
551 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
552 assertEqualInt(2048, archive_entry_size(ae));
555 * Read "dir0/dir1/dir2"
557 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
558 assertEqualInt(5, archive_entry_atime(ae));
559 assertEqualInt(5, archive_entry_ctime(ae));
560 assertEqualInt(5, archive_entry_mtime(ae));
561 assertEqualString("dir0/dir1/dir2", archive_entry_pathname(ae));
562 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
563 assertEqualInt(2048, archive_entry_size(ae));
566 * Read "dir0/dir1/dir2/dir3"
568 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
569 assertEqualInt(5, archive_entry_atime(ae));
570 assertEqualInt(5, archive_entry_ctime(ae));
571 assertEqualInt(5, archive_entry_mtime(ae));
572 assertEqualString("dir0/dir1/dir2/dir3",
573 archive_entry_pathname(ae));
574 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
575 assertEqualInt(2048, archive_entry_size(ae));
578 * Read "dir0/dir1/dir2/dir3/dir4"
580 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
581 assertEqualInt(5, archive_entry_atime(ae));
582 assertEqualInt(5, archive_entry_ctime(ae));
583 assertEqualInt(5, archive_entry_mtime(ae));
584 assertEqualString("dir0/dir1/dir2/dir3/dir4",
585 archive_entry_pathname(ae));
586 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
587 assertEqualInt(2048, archive_entry_size(ae));
590 * Read "dir0/dir1/dir2/dir3/dir4/dir5"
592 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
593 assertEqualInt(5, archive_entry_atime(ae));
594 assertEqualInt(5, archive_entry_ctime(ae));
595 assertEqualInt(5, archive_entry_mtime(ae));
596 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5",
597 archive_entry_pathname(ae));
598 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
599 assertEqualInt(2048, archive_entry_size(ae));
602 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6"
604 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
605 assertEqualInt(5, archive_entry_atime(ae));
606 assertEqualInt(5, archive_entry_ctime(ae));
607 assertEqualInt(5, archive_entry_mtime(ae));
608 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6",
609 archive_entry_pathname(ae));
610 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
611 assertEqualInt(2048, archive_entry_size(ae));
614 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7"
616 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
617 assertEqualInt(5, archive_entry_atime(ae));
618 assertEqualInt(5, archive_entry_ctime(ae));
619 assertEqualInt(5, archive_entry_mtime(ae));
620 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7",
621 archive_entry_pathname(ae));
622 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
623 assertEqualInt(2048, archive_entry_size(ae));
626 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8"
628 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
629 assertEqualInt(5, archive_entry_atime(ae));
630 assertEqualInt(5, archive_entry_ctime(ae));
631 assertEqualInt(5, archive_entry_mtime(ae));
632 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8",
633 archive_entry_pathname(ae));
634 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
635 assertEqualInt(2048, archive_entry_size(ae));
638 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9"
640 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
641 assertEqualInt(5, archive_entry_atime(ae));
642 assertEqualInt(5, archive_entry_ctime(ae));
643 assertEqualInt(5, archive_entry_mtime(ae));
644 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9",
645 archive_entry_pathname(ae));
646 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
647 assertEqualInt(2048, archive_entry_size(ae));
650 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA"
652 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
653 assertEqualInt(5, archive_entry_atime(ae));
654 assertEqualInt(5, archive_entry_ctime(ae));
655 assertEqualInt(5, archive_entry_mtime(ae));
656 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA",
657 archive_entry_pathname(ae));
658 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
659 assertEqualInt(2048, archive_entry_size(ae));
662 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB"
664 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
665 assertEqualInt(5, archive_entry_atime(ae));
666 assertEqualInt(5, archive_entry_ctime(ae));
667 assertEqualInt(5, archive_entry_mtime(ae));
668 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB",
669 archive_entry_pathname(ae));
670 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
671 assertEqualInt(2048, archive_entry_size(ae));
674 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC"
676 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
677 assertEqualInt(5, archive_entry_atime(ae));
678 assertEqualInt(5, archive_entry_ctime(ae));
679 assertEqualInt(5, archive_entry_mtime(ae));
680 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC",
681 archive_entry_pathname(ae));
682 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
683 assertEqualInt(2048, archive_entry_size(ae));
688 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
689 assertEqualInt(5, archive_entry_atime(ae));
690 assertEqualInt(5, archive_entry_ctime(ae));
691 assertEqualInt(5, archive_entry_mtime(ae));
692 assertEqualString("file", archive_entry_pathname(ae));
693 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
694 assertEqualInt(8, archive_entry_size(ae));
695 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
696 assertEqualMem(buff2, "12345678", 8);
701 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
702 assertEqualInt(5, archive_entry_atime(ae));
703 assertEqualInt(5, archive_entry_ctime(ae));
704 assertEqualInt(5, archive_entry_mtime(ae));
705 assertEqualString("hardlnk", archive_entry_pathname(ae));
706 assertEqualString("file", archive_entry_hardlink(ae));
707 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
708 assertEqualInt(2, archive_entry_nlink(ae));
709 assertEqualInt(0, archive_entry_size(ae));
710 assertEqualIntA(a, 0, archive_read_data(a, buff2, 10));
715 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
716 assert(archive_entry_atime_is_set(ae));
717 assertEqualInt(5, archive_entry_atime(ae));
718 assert(archive_entry_ctime_is_set(ae));
719 assertEqualInt(5, archive_entry_ctime(ae));
720 assert(archive_entry_mtime_is_set(ae));
721 assertEqualInt(5, archive_entry_mtime(ae));
722 /* Trim longname to 64 characters. */
724 assertEqualString(longname, archive_entry_pathname(ae));
725 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
726 assertEqualInt(8, archive_entry_size(ae));
727 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
728 assertEqualMem(buff2, "12345678", 8);
731 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC/file"
733 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
734 assertEqualInt(5, archive_entry_atime(ae));
735 assertEqualInt(5, archive_entry_ctime(ae));
736 assertEqualInt(5, archive_entry_mtime(ae));
738 "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC/file",
739 archive_entry_pathname(ae));
740 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
741 assertEqualInt(1, archive_entry_nlink(ae));
742 assertEqualInt(8, archive_entry_size(ae));
743 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
744 assertEqualMem(buff2, "12345678", 8);
747 * Read "dir0/dir1/file1"
749 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
750 assertEqualInt(5, archive_entry_atime(ae));
751 assertEqualInt(5, archive_entry_ctime(ae));
752 assertEqualInt(5, archive_entry_mtime(ae));
753 assertEqualString("dir0/dir1/file1", archive_entry_pathname(ae));
754 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
755 assertEqualInt(1, archive_entry_nlink(ae));
756 assertEqualInt(8, archive_entry_size(ae));
757 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
758 assertEqualMem(buff2, "12345678", 8);
761 * Read "dir0/dir1/file2"
763 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
764 assertEqualInt(5, archive_entry_atime(ae));
765 assertEqualInt(5, archive_entry_ctime(ae));
766 assertEqualInt(5, archive_entry_mtime(ae));
767 assertEqualString("dir0/dir1/file2", archive_entry_pathname(ae));
768 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
769 assertEqualInt(1, archive_entry_nlink(ae));
770 assertEqualInt(8, archive_entry_size(ae));
771 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
772 assertEqualMem(buff2, "12345678", 8);
777 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
778 assert(archive_entry_atime_is_set(ae));
779 assertEqualInt(5, archive_entry_atime(ae));
780 assert(!archive_entry_birthtime_is_set(ae));
781 assertEqualInt(0, archive_entry_birthtime(ae));
782 assert(archive_entry_ctime_is_set(ae));
783 assertEqualInt(5, archive_entry_ctime(ae));
784 assert(archive_entry_mtime_is_set(ae));
785 assertEqualInt(5, archive_entry_mtime(ae));
786 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
787 assertEqualInt(0, archive_entry_size(ae));
790 * Verify the end of the archive.
792 assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
793 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
794 assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
797 * -----------------------------------------------------------
798 * Now, read the data back without Rockridge and Joliet option
800 * This mode appears rr_moved directory.
801 * -----------------------------------------------------------
803 assert((a = archive_read_new()) != NULL);
804 assertEqualIntA(a, 0, archive_read_support_format_all(a));
805 assertEqualIntA(a, 0, archive_read_support_filter_all(a));
806 /* Disable Rockridge and Joliet extensions support. */
807 assertEqualInt(ARCHIVE_OK,
808 archive_read_set_option(a, NULL, "rockridge", NULL));
809 assertEqualInt(ARCHIVE_OK,
810 archive_read_set_option(a, NULL, "joliet", NULL));
811 assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used));
814 * Read Root Directory
816 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
817 assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae));
818 assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae));
819 assertEqualString(".", archive_entry_pathname(ae));
820 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
821 assertEqualInt(2048, archive_entry_size(ae));
826 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
827 assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae));
828 assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae));
829 assertEqualString("RR_MOVED", archive_entry_pathname(ae));
830 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
831 assertEqualInt(2048, archive_entry_size(ae));
834 * Read "rr_moved/dir7"
836 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
837 assertEqualInt(5, archive_entry_atime(ae));
838 assertEqualInt(5, archive_entry_ctime(ae));
839 assertEqualInt(5, archive_entry_mtime(ae));
840 assertEqualString("RR_MOVED/DIR7", archive_entry_pathname(ae));
841 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
842 assertEqualInt(2048, archive_entry_size(ae));
845 * Read "rr_moved/dir7/dir8"
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("RR_MOVED/DIR7/DIR8", archive_entry_pathname(ae));
852 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
853 assertEqualInt(2048, archive_entry_size(ae));
856 * Read "rr_moved/dir7/dir8/dir9"
858 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
859 assertEqualInt(5, archive_entry_atime(ae));
860 assertEqualInt(5, archive_entry_ctime(ae));
861 assertEqualInt(5, archive_entry_mtime(ae));
862 assertEqualString("RR_MOVED/DIR7/DIR8/DIR9",
863 archive_entry_pathname(ae));
864 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
865 assertEqualInt(2048, archive_entry_size(ae));
868 * Read "rr_moved/dir7/dir8/dir9/dira"
870 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
871 assertEqualInt(5, archive_entry_atime(ae));
872 assertEqualInt(5, archive_entry_ctime(ae));
873 assertEqualInt(5, archive_entry_mtime(ae));
874 assertEqualString("RR_MOVED/DIR7/DIR8/DIR9/DIRA",
875 archive_entry_pathname(ae));
876 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
877 assertEqualInt(2048, archive_entry_size(ae));
880 * Read "rr_moved/dir7/dir8/dir9/dira/dirB"
882 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
883 assertEqualInt(5, archive_entry_atime(ae));
884 assertEqualInt(5, archive_entry_ctime(ae));
885 assertEqualInt(5, archive_entry_mtime(ae));
886 assertEqualString("RR_MOVED/DIR7/DIR8/DIR9/DIRA/DIRB",
887 archive_entry_pathname(ae));
888 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
889 assertEqualInt(2048, archive_entry_size(ae));
892 * Read "rr_moved/dir7/dir8/dir9/dirA/dirB/dirC"
894 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
895 assertEqualInt(5, archive_entry_atime(ae));
896 assertEqualInt(5, archive_entry_ctime(ae));
897 assertEqualInt(5, archive_entry_mtime(ae));
898 assertEqualString("RR_MOVED/DIR7/DIR8/DIR9/DIRA/DIRB/DIRC",
899 archive_entry_pathname(ae));
900 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
901 assertEqualInt(2048, archive_entry_size(ae));
906 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
907 assertEqualInt(5, archive_entry_atime(ae));
908 assertEqualInt(5, archive_entry_ctime(ae));
909 assertEqualInt(5, archive_entry_mtime(ae));
910 assertEqualString("DIR0", archive_entry_pathname(ae));
911 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
912 assertEqualInt(2048, archive_entry_size(ae));
917 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
918 assertEqualInt(5, archive_entry_atime(ae));
919 assertEqualInt(5, archive_entry_ctime(ae));
920 assertEqualInt(5, archive_entry_mtime(ae));
921 assertEqualString("DIR0/DIR1", archive_entry_pathname(ae));
922 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
923 assertEqualInt(2048, archive_entry_size(ae));
926 * Read "dir0/dir1/dir2"
928 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
929 assertEqualInt(5, archive_entry_atime(ae));
930 assertEqualInt(5, archive_entry_ctime(ae));
931 assertEqualInt(5, archive_entry_mtime(ae));
932 assertEqualString("DIR0/DIR1/DIR2", archive_entry_pathname(ae));
933 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
934 assertEqualInt(2048, archive_entry_size(ae));
937 * Read "dir0/dir1/dir2/dir3"
939 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
940 assertEqualInt(5, archive_entry_atime(ae));
941 assertEqualInt(5, archive_entry_ctime(ae));
942 assertEqualInt(5, archive_entry_mtime(ae));
943 assertEqualString("DIR0/DIR1/DIR2/DIR3",
944 archive_entry_pathname(ae));
945 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
946 assertEqualInt(2048, archive_entry_size(ae));
949 * Read "dir0/dir1/dir2/dir3/dir4"
951 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
952 assertEqualInt(5, archive_entry_atime(ae));
953 assertEqualInt(5, archive_entry_ctime(ae));
954 assertEqualInt(5, archive_entry_mtime(ae));
955 assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4",
956 archive_entry_pathname(ae));
957 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
958 assertEqualInt(2048, archive_entry_size(ae));
961 * Read "dir0/dir1/dir2/dir3/dir4/dir5"
963 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
964 assertEqualInt(5, archive_entry_atime(ae));
965 assertEqualInt(5, archive_entry_ctime(ae));
966 assertEqualInt(5, archive_entry_mtime(ae));
967 assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5",
968 archive_entry_pathname(ae));
969 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
970 assertEqualInt(2048, archive_entry_size(ae));
973 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6"
975 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
976 assertEqualInt(5, archive_entry_atime(ae));
977 assertEqualInt(5, archive_entry_ctime(ae));
978 assertEqualInt(5, archive_entry_mtime(ae));
979 assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5/DIR6",
980 archive_entry_pathname(ae));
981 assert((S_IFDIR | 0700) == archive_entry_mode(ae));
982 assertEqualInt(2048, archive_entry_size(ae));
987 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
988 assertEqualInt(5, archive_entry_atime(ae));
989 assertEqualInt(5, archive_entry_ctime(ae));
990 assertEqualInt(5, archive_entry_mtime(ae));
991 assertEqualString("HARDLNK", archive_entry_pathname(ae));
992 assertEqualString(NULL, archive_entry_hardlink(ae));
993 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
994 assertEqualInt(8, archive_entry_size(ae));
995 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
996 assertEqualMem(buff2, "12345678", 8);
1001 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
1002 assertEqualInt(5, archive_entry_atime(ae));
1003 assertEqualInt(0, archive_entry_birthtime(ae));
1004 assertEqualInt(5, archive_entry_ctime(ae));
1005 assertEqualInt(5, archive_entry_mtime(ae));
1006 assertEqualString("FILE", archive_entry_pathname(ae));
1007 assertEqualString("HARDLNK", archive_entry_hardlink(ae));
1008 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
1009 assertEqualInt(2, archive_entry_nlink(ae));
1010 assertEqualInt(0, archive_entry_size(ae));
1011 assertEqualIntA(a, 0, archive_read_data(a, buff2, 10));
1017 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
1018 assert(archive_entry_atime_is_set(ae));
1019 assertEqualInt(5, archive_entry_atime(ae));
1020 assert(archive_entry_ctime_is_set(ae));
1021 assertEqualInt(5, archive_entry_ctime(ae));
1022 assert(archive_entry_mtime_is_set(ae));
1023 assertEqualInt(5, archive_entry_mtime(ae));
1024 assertEqualString("LONGNAME", archive_entry_pathname(ae));
1025 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
1026 assertEqualInt(8, archive_entry_size(ae));
1027 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
1028 assertEqualMem(buff2, "12345678", 8);
1031 * Read "rr_moved/dir7/dir8/dir9/dirA/dirB/dirC/file"
1033 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
1034 assertEqualInt(5, archive_entry_atime(ae));
1035 assertEqualInt(5, archive_entry_ctime(ae));
1036 assertEqualInt(5, archive_entry_mtime(ae));
1038 "RR_MOVED/DIR7/DIR8/DIR9/DIRA/DIRB/DIRC/FILE",
1039 archive_entry_pathname(ae));
1040 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
1041 assertEqualInt(1, archive_entry_nlink(ae));
1042 assertEqualInt(8, archive_entry_size(ae));
1043 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
1044 assertEqualMem(buff2, "12345678", 8);
1047 * Read "dir0/dir1/file1"
1049 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
1050 assertEqualInt(5, archive_entry_atime(ae));
1051 assertEqualInt(5, archive_entry_ctime(ae));
1052 assertEqualInt(5, archive_entry_mtime(ae));
1053 assertEqualString("DIR0/DIR1/FILE1", archive_entry_pathname(ae));
1054 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
1055 assertEqualInt(1, archive_entry_nlink(ae));
1056 assertEqualInt(8, archive_entry_size(ae));
1057 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
1058 assertEqualMem(buff2, "12345678", 8);
1061 * Read "dir0/dir1/file2"
1063 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
1064 assertEqualInt(5, archive_entry_atime(ae));
1065 assertEqualInt(5, archive_entry_ctime(ae));
1066 assertEqualInt(5, archive_entry_mtime(ae));
1067 assertEqualString("DIR0/DIR1/FILE2", archive_entry_pathname(ae));
1068 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
1069 assertEqualInt(1, archive_entry_nlink(ae));
1070 assertEqualInt(8, archive_entry_size(ae));
1071 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
1072 assertEqualMem(buff2, "12345678", 8);
1075 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7" as file
1077 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
1078 assertEqualInt(5, archive_entry_atime(ae));
1079 assertEqualInt(5, archive_entry_ctime(ae));
1080 assertEqualInt(5, archive_entry_mtime(ae));
1081 assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5/DIR6/DIR7",
1082 archive_entry_pathname(ae));
1083 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
1084 assertEqualInt(0, archive_entry_size(ae));
1089 assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
1090 assert(archive_entry_atime_is_set(ae));
1091 assertEqualInt(5, archive_entry_atime(ae));
1092 assert(!archive_entry_birthtime_is_set(ae));
1093 assertEqualInt(0, archive_entry_birthtime(ae));
1094 assert(archive_entry_ctime_is_set(ae));
1095 assertEqualInt(5, archive_entry_ctime(ae));
1096 assert(archive_entry_mtime_is_set(ae));
1097 assertEqualInt(5, archive_entry_mtime(ae));
1098 assertEqualString("SYMLNK", archive_entry_pathname(ae));
1099 assert((AE_IFREG | 0400) == archive_entry_mode(ae));
1100 assertEqualInt(0, archive_entry_size(ae));
1103 * Verify the end of the archive.
1105 assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
1106 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
1107 assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));