1231200Smm/*- 2231200Smm * Copyright (c) 2003-2008 Tim Kientzle 3231200Smm * Copyright (c) 2009,2010 Michihiro NAKAJIMA 4231200Smm * All rights reserved. 5231200Smm * 6231200Smm * Redistribution and use in source and binary forms, with or without 7231200Smm * modification, are permitted provided that the following conditions 8231200Smm * are met: 9231200Smm * 1. Redistributions of source code must retain the above copyright 10231200Smm * notice, this list of conditions and the following disclaimer. 11231200Smm * 2. Redistributions in binary form must reproduce the above copyright 12231200Smm * notice, this list of conditions and the following disclaimer in the 13231200Smm * documentation and/or other materials provided with the distribution. 14231200Smm * 15231200Smm * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 16231200Smm * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17231200Smm * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18231200Smm * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 19231200Smm * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20231200Smm * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21231200Smm * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22231200Smm * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23231200Smm * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24231200Smm * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25231200Smm */ 26231200Smm#include "test.h" 27231200Smm__FBSDID("$FreeBSD$"); 28231200Smm 29231200Smmchar buff2[64]; 30231200SmmDEFINE_TEST(test_write_format_iso9660) 31231200Smm{ 32231200Smm size_t buffsize = 1000000; 33231200Smm char *buff; 34231200Smm struct archive_entry *ae; 35231200Smm struct archive *a; 36231200Smm char dirname[1024]; 37231200Smm char dir[6]; 38231200Smm char longname[] = 39231200Smm "longname00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 40231200Smm "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" 41231200Smm "cccccccccccccccccccccccccccccccccccccccccccccccccc" 42231200Smm "dddddddddddddddddddddddddddddddddddddddddddddddddd"; 43231200Smm 44231200Smm size_t used; 45231200Smm int i; 46231200Smm 47231200Smm buff = malloc(buffsize); /* million bytes of work area */ 48231200Smm assert(buff != NULL); 49231200Smm 50231200Smm /* Create a new archive in memory. */ 51231200Smm assert((a = archive_write_new()) != NULL); 52231200Smm assertA(0 == archive_write_set_format_iso9660(a)); 53248616Smm assertA(0 == archive_write_add_filter_none(a)); 54231200Smm assertA(0 == archive_write_open_memory(a, buff, buffsize, &used)); 55231200Smm 56231200Smm /* 57231200Smm * "file" has a bunch of attributes and 8 bytes of data. 58231200Smm */ 59231200Smm assert((ae = archive_entry_new()) != NULL); 60231200Smm archive_entry_set_atime(ae, 2, 20); 61231200Smm archive_entry_set_birthtime(ae, 3, 30); 62231200Smm archive_entry_set_ctime(ae, 4, 40); 63231200Smm archive_entry_set_mtime(ae, 5, 50); 64231200Smm archive_entry_copy_pathname(ae, "file"); 65231200Smm archive_entry_set_mode(ae, AE_IFREG | 0755); 66231200Smm archive_entry_set_size(ae, 8); 67231200Smm archive_entry_set_nlink(ae, 2); 68231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 69231200Smm archive_entry_free(ae); 70231200Smm assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9)); 71231200Smm 72231200Smm /* 73231200Smm * "hardlnk" has linked to "file". 74231200Smm */ 75231200Smm assert((ae = archive_entry_new()) != NULL); 76231200Smm archive_entry_set_atime(ae, 2, 20); 77231200Smm archive_entry_set_birthtime(ae, 3, 30); 78231200Smm archive_entry_set_ctime(ae, 4, 40); 79231200Smm archive_entry_set_mtime(ae, 5, 50); 80231200Smm archive_entry_copy_pathname(ae, "hardlnk"); 81231200Smm archive_entry_set_mode(ae, AE_IFREG | 0755); 82231200Smm archive_entry_set_hardlink(ae, "file"); 83231200Smm archive_entry_set_nlink(ae, 2); 84231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 85231200Smm archive_entry_free(ae); 86231200Smm 87231200Smm /* 88231200Smm * longname is similar but has birthtime later than mtime. 89231200Smm */ 90231200Smm assert((ae = archive_entry_new()) != NULL); 91231200Smm archive_entry_set_atime(ae, 2, 20); 92231200Smm archive_entry_set_birthtime(ae, 8, 80); 93231200Smm archive_entry_set_ctime(ae, 4, 40); 94231200Smm archive_entry_set_mtime(ae, 5, 50); 95231200Smm archive_entry_copy_pathname(ae, longname); 96231200Smm archive_entry_set_mode(ae, AE_IFREG | 0666); 97231200Smm archive_entry_set_size(ae, 8); 98231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 99231200Smm archive_entry_free(ae); 100231200Smm assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9)); 101231200Smm 102231200Smm /* 103231200Smm * "symlnk has symbolic linked to longname. 104231200Smm */ 105231200Smm assert((ae = archive_entry_new()) != NULL); 106231200Smm archive_entry_set_atime(ae, 2, 20); 107231200Smm archive_entry_set_ctime(ae, 4, 40); 108231200Smm archive_entry_set_mtime(ae, 5, 50); 109231200Smm archive_entry_copy_pathname(ae, "symlnk"); 110231200Smm archive_entry_set_mode(ae, AE_IFLNK | 0555); 111231200Smm archive_entry_set_symlink(ae, longname); 112231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 113231200Smm archive_entry_free(ae); 114231200Smm 115231200Smm /* 116231200Smm * "dir*" has a bunch of attributes. 117231200Smm */ 118231200Smm dirname[0] = '\0'; 119231200Smm strcpy(dir, "/dir0"); 120231200Smm for (i = 0; i < 10; i++) { 121231200Smm dir[4] = '0' + i; 122231200Smm if (i == 0) 123231200Smm strcat(dirname, dir+1); 124231200Smm else 125231200Smm strcat(dirname, dir); 126231200Smm assert((ae = archive_entry_new()) != NULL); 127231200Smm archive_entry_set_atime(ae, 2, 20); 128231200Smm archive_entry_set_birthtime(ae, 3, 30); 129231200Smm archive_entry_set_ctime(ae, 4, 40); 130231200Smm archive_entry_set_mtime(ae, 5, 50); 131231200Smm archive_entry_copy_pathname(ae, dirname); 132231200Smm archive_entry_set_mode(ae, S_IFDIR | 0755); 133231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 134231200Smm archive_entry_free(ae); 135231200Smm } 136231200Smm 137231200Smm /* 138231200Smm * "dir0/dir1/file1" has 8 bytes of data. 139231200Smm */ 140231200Smm assert((ae = archive_entry_new()) != NULL); 141231200Smm archive_entry_set_atime(ae, 2, 20); 142231200Smm archive_entry_set_birthtime(ae, 3, 30); 143231200Smm archive_entry_set_ctime(ae, 4, 40); 144231200Smm archive_entry_set_mtime(ae, 5, 50); 145231200Smm archive_entry_copy_pathname(ae, "dir0/dir1/file1"); 146231200Smm archive_entry_set_mode(ae, AE_IFREG | 0755); 147231200Smm archive_entry_set_size(ae, 8); 148231200Smm archive_entry_set_nlink(ae, 1); 149231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 150231200Smm archive_entry_free(ae); 151231200Smm assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9)); 152231200Smm 153231200Smm /* 154231200Smm * "dir0/dir1/file2" has 8 bytes of data. 155231200Smm */ 156231200Smm assert((ae = archive_entry_new()) != NULL); 157231200Smm archive_entry_set_atime(ae, 2, 20); 158231200Smm archive_entry_set_birthtime(ae, 3, 30); 159231200Smm archive_entry_set_ctime(ae, 4, 40); 160231200Smm archive_entry_set_mtime(ae, 5, 50); 161231200Smm archive_entry_copy_pathname(ae, "dir0/dir1/file2"); 162231200Smm archive_entry_set_mode(ae, AE_IFREG | 0755); 163231200Smm archive_entry_set_size(ae, 8); 164231200Smm archive_entry_set_nlink(ae, 1); 165231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 166231200Smm archive_entry_free(ae); 167231200Smm assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9)); 168231200Smm 169231200Smm /* 170231200Smm * Add a wrong path "dir0/dir1/file2/wrong" 171231200Smm */ 172231200Smm assert((ae = archive_entry_new()) != NULL); 173231200Smm archive_entry_set_atime(ae, 2, 20); 174231200Smm archive_entry_set_birthtime(ae, 3, 30); 175231200Smm archive_entry_set_ctime(ae, 4, 40); 176231200Smm archive_entry_set_mtime(ae, 5, 50); 177231200Smm archive_entry_copy_pathname(ae, "dir0/dir1/file2/wrong"); 178231200Smm archive_entry_set_mode(ae, AE_IFREG | 0755); 179231200Smm archive_entry_set_size(ae, 8); 180231200Smm archive_entry_set_nlink(ae, 1); 181231200Smm assertEqualIntA(a, ARCHIVE_FAILED, archive_write_header(a, ae)); 182231200Smm archive_entry_free(ae); 183231200Smm 184231200Smm /* Close out the archive. */ 185231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a)); 186231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_free(a)); 187231200Smm 188231200Smm /* 189231200Smm * ----------------------------------------------------------- 190231200Smm * Now, read the data back(read Rockridge extensions). 191231200Smm * ----------------------------------------------------------- 192231200Smm */ 193231200Smm assert((a = archive_read_new()) != NULL); 194231200Smm assertEqualIntA(a, 0, archive_read_support_format_all(a)); 195231200Smm assertEqualIntA(a, 0, archive_read_support_filter_all(a)); 196231200Smm assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used)); 197231200Smm 198231200Smm /* 199231200Smm * Read Root Directory 200231200Smm */ 201231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 202231200Smm assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae)); 203231200Smm assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae)); 204231200Smm assertEqualString(".", archive_entry_pathname(ae)); 205231200Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 206231200Smm assertEqualInt(2048, archive_entry_size(ae)); 207231200Smm 208231200Smm /* 209231200Smm * Read "dir0" 210231200Smm */ 211231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 212231200Smm assertEqualInt(2, archive_entry_atime(ae)); 213231200Smm assertEqualInt(3, archive_entry_birthtime(ae)); 214231200Smm assertEqualInt(4, archive_entry_ctime(ae)); 215231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 216231200Smm assertEqualString("dir0", archive_entry_pathname(ae)); 217231200Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 218231200Smm assertEqualInt(2048, archive_entry_size(ae)); 219231200Smm 220231200Smm /* 221231200Smm * Read "dir0/dir1" 222231200Smm */ 223231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 224231200Smm assertEqualInt(2, archive_entry_atime(ae)); 225231200Smm assertEqualInt(3, archive_entry_birthtime(ae)); 226231200Smm assertEqualInt(4, archive_entry_ctime(ae)); 227231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 228231200Smm assertEqualString("dir0/dir1", archive_entry_pathname(ae)); 229231200Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 230231200Smm assertEqualInt(2048, archive_entry_size(ae)); 231231200Smm 232231200Smm /* 233231200Smm * Read "dir0/dir1/dir2" 234231200Smm */ 235231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 236231200Smm assertEqualInt(2, archive_entry_atime(ae)); 237231200Smm assertEqualInt(3, archive_entry_birthtime(ae)); 238231200Smm assertEqualInt(4, archive_entry_ctime(ae)); 239231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 240231200Smm assertEqualString("dir0/dir1/dir2", archive_entry_pathname(ae)); 241231200Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 242231200Smm assertEqualInt(2048, archive_entry_size(ae)); 243231200Smm 244231200Smm /* 245231200Smm * Read "dir0/dir1/dir2/dir3" 246231200Smm */ 247231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 248231200Smm assertEqualInt(2, archive_entry_atime(ae)); 249231200Smm assertEqualInt(3, archive_entry_birthtime(ae)); 250231200Smm assertEqualInt(4, archive_entry_ctime(ae)); 251231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 252231200Smm assertEqualString("dir0/dir1/dir2/dir3", 253231200Smm archive_entry_pathname(ae)); 254231200Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 255231200Smm assertEqualInt(2048, archive_entry_size(ae)); 256231200Smm 257231200Smm /* 258231200Smm * Read "dir0/dir1/dir2/dir3/dir4" 259231200Smm */ 260231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 261231200Smm assertEqualInt(2, archive_entry_atime(ae)); 262231200Smm assertEqualInt(3, archive_entry_birthtime(ae)); 263231200Smm assertEqualInt(4, archive_entry_ctime(ae)); 264231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 265231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4", 266231200Smm archive_entry_pathname(ae)); 267231200Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 268231200Smm assertEqualInt(2048, archive_entry_size(ae)); 269231200Smm 270231200Smm /* 271231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5" 272231200Smm */ 273231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 274231200Smm assertEqualInt(2, archive_entry_atime(ae)); 275231200Smm assertEqualInt(3, archive_entry_birthtime(ae)); 276231200Smm assertEqualInt(4, archive_entry_ctime(ae)); 277231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 278231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5", 279231200Smm archive_entry_pathname(ae)); 280231200Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 281231200Smm assertEqualInt(2048, archive_entry_size(ae)); 282231200Smm 283231200Smm /* 284231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6" 285231200Smm */ 286231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 287231200Smm assertEqualInt(2, archive_entry_atime(ae)); 288231200Smm assertEqualInt(3, archive_entry_birthtime(ae)); 289231200Smm assertEqualInt(4, archive_entry_ctime(ae)); 290231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 291231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6", 292231200Smm archive_entry_pathname(ae)); 293231200Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 294231200Smm assertEqualInt(2048, archive_entry_size(ae)); 295231200Smm 296231200Smm /* 297231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7" 298231200Smm */ 299231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 300231200Smm assertEqualInt(2, archive_entry_atime(ae)); 301231200Smm assertEqualInt(3, archive_entry_birthtime(ae)); 302231200Smm assertEqualInt(4, archive_entry_ctime(ae)); 303231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 304231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7", 305231200Smm archive_entry_pathname(ae)); 306231200Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 307231200Smm assertEqualInt(2048, archive_entry_size(ae)); 308231200Smm 309231200Smm /* 310231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8" 311231200Smm */ 312231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 313231200Smm assertEqualInt(2, archive_entry_atime(ae)); 314231200Smm assertEqualInt(3, archive_entry_birthtime(ae)); 315231200Smm assertEqualInt(4, archive_entry_ctime(ae)); 316231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 317231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8", 318231200Smm archive_entry_pathname(ae)); 319231200Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 320231200Smm assertEqualInt(2048, archive_entry_size(ae)); 321231200Smm 322231200Smm /* 323231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9" 324231200Smm */ 325231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 326231200Smm assertEqualInt(2, archive_entry_atime(ae)); 327231200Smm assertEqualInt(3, archive_entry_birthtime(ae)); 328231200Smm assertEqualInt(4, archive_entry_ctime(ae)); 329231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 330231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9", 331231200Smm archive_entry_pathname(ae)); 332231200Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 333231200Smm assertEqualInt(2048, archive_entry_size(ae)); 334231200Smm 335231200Smm /* 336231200Smm * Read "hardlnk" 337231200Smm */ 338231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 339231200Smm assertEqualInt(2, archive_entry_atime(ae)); 340231200Smm assertEqualInt(3, archive_entry_birthtime(ae)); 341231200Smm assertEqualInt(4, archive_entry_ctime(ae)); 342231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 343231200Smm assertEqualString("hardlnk", archive_entry_pathname(ae)); 344231200Smm assert((AE_IFREG | 0555) == archive_entry_mode(ae)); 345231200Smm assertEqualInt(2, archive_entry_nlink(ae)); 346231200Smm assertEqualInt(8, archive_entry_size(ae)); 347231200Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 348231200Smm assertEqualMem(buff2, "12345678", 8); 349231200Smm 350231200Smm /* 351231200Smm * Read "file" 352231200Smm */ 353231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 354231200Smm assertEqualInt(2, archive_entry_atime(ae)); 355231200Smm assertEqualInt(3, archive_entry_birthtime(ae)); 356231200Smm assertEqualInt(4, archive_entry_ctime(ae)); 357231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 358231200Smm assertEqualString("file", archive_entry_pathname(ae)); 359231200Smm assertEqualString("hardlnk", archive_entry_hardlink(ae)); 360231200Smm assert((AE_IFREG | 0555) == archive_entry_mode(ae)); 361231200Smm assertEqualInt(2, archive_entry_nlink(ae)); 362231200Smm assertEqualInt(0, archive_entry_size(ae)); 363231200Smm 364231200Smm /* 365231200Smm * Read longname 366231200Smm */ 367231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 368231200Smm assert(archive_entry_atime_is_set(ae)); 369231200Smm assertEqualInt(2, archive_entry_atime(ae)); 370231200Smm /* Birthtime > mtime above, so it doesn't get stored at all. */ 371231200Smm assert(!archive_entry_birthtime_is_set(ae)); 372231200Smm assertEqualInt(0, archive_entry_birthtime(ae)); 373231200Smm assert(archive_entry_ctime_is_set(ae)); 374231200Smm assertEqualInt(4, archive_entry_ctime(ae)); 375231200Smm assert(archive_entry_mtime_is_set(ae)); 376231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 377231200Smm assertEqualString(longname, archive_entry_pathname(ae)); 378231200Smm#if !defined(_WIN32) && !defined(__CYGWIN__) 379231200Smm assert((AE_IFREG | 0444) == archive_entry_mode(ae)); 380231200Smm#else 381231200Smm /* On Windows and CYGWIN, always set all exec bit ON by default. */ 382231200Smm assert((AE_IFREG | 0555) == archive_entry_mode(ae)); 383231200Smm#endif 384231200Smm assertEqualInt(8, archive_entry_size(ae)); 385231200Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 386231200Smm assertEqualMem(buff2, "12345678", 8); 387231200Smm 388231200Smm /* 389231200Smm * Read "dir0/dir1/file1" 390231200Smm */ 391231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 392231200Smm assertEqualInt(2, archive_entry_atime(ae)); 393231200Smm assertEqualInt(3, archive_entry_birthtime(ae)); 394231200Smm assertEqualInt(4, archive_entry_ctime(ae)); 395231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 396231200Smm assertEqualString("dir0/dir1/file1", archive_entry_pathname(ae)); 397231200Smm assert((AE_IFREG | 0555) == archive_entry_mode(ae)); 398231200Smm assertEqualInt(1, archive_entry_nlink(ae)); 399231200Smm assertEqualInt(8, archive_entry_size(ae)); 400231200Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 401231200Smm assertEqualMem(buff2, "12345678", 8); 402231200Smm 403231200Smm /* 404231200Smm * Read "dir0/dir1/file2" 405231200Smm */ 406231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 407231200Smm assertEqualInt(2, archive_entry_atime(ae)); 408231200Smm assertEqualInt(3, archive_entry_birthtime(ae)); 409231200Smm assertEqualInt(4, archive_entry_ctime(ae)); 410231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 411231200Smm assertEqualString("dir0/dir1/file2", archive_entry_pathname(ae)); 412231200Smm assert((AE_IFREG | 0555) == archive_entry_mode(ae)); 413231200Smm assertEqualInt(1, archive_entry_nlink(ae)); 414231200Smm assertEqualInt(8, archive_entry_size(ae)); 415231200Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 416231200Smm assertEqualMem(buff2, "12345678", 8); 417231200Smm 418231200Smm /* 419231200Smm * Read "symlnk" 420231200Smm */ 421231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 422231200Smm assert(archive_entry_atime_is_set(ae)); 423231200Smm assertEqualInt(2, archive_entry_atime(ae)); 424231200Smm assert(!archive_entry_birthtime_is_set(ae)); 425231200Smm assertEqualInt(0, archive_entry_birthtime(ae)); 426231200Smm assert(archive_entry_ctime_is_set(ae)); 427231200Smm assertEqualInt(4, archive_entry_ctime(ae)); 428231200Smm assert(archive_entry_mtime_is_set(ae)); 429231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 430231200Smm assertEqualString("symlnk", archive_entry_pathname(ae)); 431231200Smm assert((AE_IFLNK | 0555) == archive_entry_mode(ae)); 432231200Smm assertEqualString(longname, archive_entry_symlink(ae)); 433231200Smm 434231200Smm /* 435231200Smm * Verify the end of the archive. 436231200Smm */ 437231200Smm assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 438231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); 439231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a)); 440231200Smm 441231200Smm /* 442231200Smm * ----------------------------------------------------------- 443231200Smm * Now, read the data back without Rockridge option 444231200Smm * (read Joliet extensions). 445231200Smm * ----------------------------------------------------------- 446231200Smm */ 447231200Smm assert((a = archive_read_new()) != NULL); 448231200Smm assertEqualIntA(a, 0, archive_read_support_format_all(a)); 449231200Smm assertEqualIntA(a, 0, archive_read_support_filter_all(a)); 450231200Smm /* Disable Rockridge extensions support. */ 451231200Smm assertEqualInt(ARCHIVE_OK, 452231200Smm archive_read_set_option(a, NULL, "rockridge", NULL)); 453231200Smm assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used)); 454231200Smm 455231200Smm /* 456231200Smm * Read Root Directory 457231200Smm */ 458231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 459231200Smm assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae)); 460231200Smm assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae)); 461231200Smm assertEqualString(".", archive_entry_pathname(ae)); 462231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 463231200Smm assertEqualInt(2048, archive_entry_size(ae)); 464231200Smm 465231200Smm /* 466231200Smm * Read "dir0" 467231200Smm */ 468231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 469231200Smm assertEqualInt(5, archive_entry_atime(ae)); 470231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 471231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 472231200Smm assertEqualString("dir0", archive_entry_pathname(ae)); 473231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 474231200Smm assertEqualInt(2048, archive_entry_size(ae)); 475231200Smm 476231200Smm /* 477231200Smm * Read "dir0/dir1" 478231200Smm */ 479231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 480231200Smm assertEqualInt(5, archive_entry_atime(ae)); 481231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 482231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 483231200Smm assertEqualString("dir0/dir1", archive_entry_pathname(ae)); 484231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 485231200Smm assertEqualInt(2048, archive_entry_size(ae)); 486231200Smm 487231200Smm /* 488231200Smm * Read "dir0/dir1/dir2" 489231200Smm */ 490231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 491231200Smm assertEqualInt(5, archive_entry_atime(ae)); 492231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 493231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 494231200Smm assertEqualString("dir0/dir1/dir2", archive_entry_pathname(ae)); 495231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 496231200Smm assertEqualInt(2048, archive_entry_size(ae)); 497231200Smm 498231200Smm /* 499231200Smm * Read "dir0/dir1/dir2/dir3" 500231200Smm */ 501231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 502231200Smm assertEqualInt(5, archive_entry_atime(ae)); 503231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 504231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 505231200Smm assertEqualString("dir0/dir1/dir2/dir3", 506231200Smm archive_entry_pathname(ae)); 507231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 508231200Smm assertEqualInt(2048, archive_entry_size(ae)); 509231200Smm 510231200Smm /* 511231200Smm * Read "dir0/dir1/dir2/dir3/dir4" 512231200Smm */ 513231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 514231200Smm assertEqualInt(5, archive_entry_atime(ae)); 515231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 516231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 517231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4", 518231200Smm archive_entry_pathname(ae)); 519231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 520231200Smm assertEqualInt(2048, archive_entry_size(ae)); 521231200Smm 522231200Smm /* 523231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5" 524231200Smm */ 525231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 526231200Smm assertEqualInt(5, archive_entry_atime(ae)); 527231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 528231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 529231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5", 530231200Smm archive_entry_pathname(ae)); 531231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 532231200Smm assertEqualInt(2048, archive_entry_size(ae)); 533231200Smm 534231200Smm /* 535231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6" 536231200Smm */ 537231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 538231200Smm assertEqualInt(5, archive_entry_atime(ae)); 539231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 540231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 541231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6", 542231200Smm archive_entry_pathname(ae)); 543231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 544231200Smm assertEqualInt(2048, archive_entry_size(ae)); 545231200Smm 546231200Smm /* 547231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7" 548231200Smm */ 549231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 550231200Smm assertEqualInt(5, archive_entry_atime(ae)); 551231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 552231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 553231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7", 554231200Smm archive_entry_pathname(ae)); 555231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 556231200Smm assertEqualInt(2048, archive_entry_size(ae)); 557231200Smm 558231200Smm /* 559231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8" 560231200Smm */ 561231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 562231200Smm assertEqualInt(5, archive_entry_atime(ae)); 563231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 564231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 565231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8", 566231200Smm archive_entry_pathname(ae)); 567231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 568231200Smm assertEqualInt(2048, archive_entry_size(ae)); 569231200Smm 570231200Smm /* 571231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9" 572231200Smm */ 573231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 574231200Smm assertEqualInt(5, archive_entry_atime(ae)); 575231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 576231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 577231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9", 578231200Smm archive_entry_pathname(ae)); 579231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 580231200Smm assertEqualInt(2048, archive_entry_size(ae)); 581231200Smm 582231200Smm /* 583231200Smm * Read "hardlnk" 584231200Smm */ 585231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 586231200Smm assertEqualInt(5, archive_entry_atime(ae)); 587231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 588231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 589231200Smm assertEqualString("hardlnk", archive_entry_pathname(ae)); 590231200Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 591231200Smm assertEqualInt(2, archive_entry_nlink(ae)); 592231200Smm assertEqualInt(8, archive_entry_size(ae)); 593231200Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 594231200Smm assertEqualMem(buff2, "12345678", 8); 595231200Smm 596231200Smm /* 597231200Smm * Read "file" 598231200Smm */ 599231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 600231200Smm assertEqualInt(5, archive_entry_atime(ae)); 601231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 602231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 603231200Smm assertEqualString("file", archive_entry_pathname(ae)); 604231200Smm assertEqualString("hardlnk", archive_entry_hardlink(ae)); 605231200Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 606231200Smm assertEqualInt(0, archive_entry_size(ae)); 607231200Smm assertEqualIntA(a, 0, archive_read_data(a, buff2, 10)); 608231200Smm 609231200Smm /* 610231200Smm * Read longname 611231200Smm */ 612231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 613231200Smm assert(archive_entry_atime_is_set(ae)); 614231200Smm assertEqualInt(5, archive_entry_atime(ae)); 615231200Smm assert(archive_entry_ctime_is_set(ae)); 616231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 617231200Smm assert(archive_entry_mtime_is_set(ae)); 618231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 619231200Smm /* Trim lngname to 64 characters. */ 620231200Smm longname[64] = '\0'; 621231200Smm assertEqualString(longname, archive_entry_pathname(ae)); 622231200Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 623231200Smm assertEqualInt(8, archive_entry_size(ae)); 624231200Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 625231200Smm assertEqualMem(buff2, "12345678", 8); 626231200Smm 627231200Smm /* 628231200Smm * Read "dir0/dir1/file1" 629231200Smm */ 630231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 631231200Smm assertEqualInt(5, archive_entry_atime(ae)); 632231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 633231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 634231200Smm assertEqualString("dir0/dir1/file1", archive_entry_pathname(ae)); 635231200Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 636231200Smm assertEqualInt(1, archive_entry_nlink(ae)); 637231200Smm assertEqualInt(8, archive_entry_size(ae)); 638231200Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 639231200Smm assertEqualMem(buff2, "12345678", 8); 640231200Smm 641231200Smm /* 642231200Smm * Read "dir0/dir1/file2" 643231200Smm */ 644231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 645231200Smm assertEqualInt(5, archive_entry_atime(ae)); 646231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 647231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 648231200Smm assertEqualString("dir0/dir1/file2", archive_entry_pathname(ae)); 649231200Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 650231200Smm assertEqualInt(1, archive_entry_nlink(ae)); 651231200Smm assertEqualInt(8, archive_entry_size(ae)); 652231200Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 653231200Smm assertEqualMem(buff2, "12345678", 8); 654231200Smm 655231200Smm /* 656231200Smm * Read "symlnk" 657231200Smm */ 658231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 659231200Smm assert(archive_entry_atime_is_set(ae)); 660231200Smm assertEqualInt(5, archive_entry_atime(ae)); 661231200Smm assert(!archive_entry_birthtime_is_set(ae)); 662231200Smm assertEqualInt(0, archive_entry_birthtime(ae)); 663231200Smm assert(archive_entry_ctime_is_set(ae)); 664231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 665231200Smm assert(archive_entry_mtime_is_set(ae)); 666231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 667231200Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 668231200Smm assertEqualInt(0, archive_entry_size(ae)); 669231200Smm 670231200Smm /* 671231200Smm * Verify the end of the archive. 672231200Smm */ 673231200Smm assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 674231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); 675231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a)); 676231200Smm 677231200Smm /* 678231200Smm * ----------------------------------------------------------- 679231200Smm * Now, read the data back without Rockridge and Joliet option 680231200Smm * (read ISO9660). 681231200Smm * This mode appears rr_moved directory. 682231200Smm * ----------------------------------------------------------- 683231200Smm */ 684231200Smm assert((a = archive_read_new()) != NULL); 685231200Smm assertEqualIntA(a, 0, archive_read_support_format_all(a)); 686231200Smm assertEqualIntA(a, 0, archive_read_support_filter_all(a)); 687231200Smm /* Disable Rockridge and Joliet extensions support. */ 688231200Smm assertEqualInt(ARCHIVE_OK, 689231200Smm archive_read_set_option(a, NULL, "rockridge", NULL)); 690231200Smm assertEqualInt(ARCHIVE_OK, 691231200Smm archive_read_set_option(a, NULL, "joliet", NULL)); 692231200Smm assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used)); 693231200Smm 694231200Smm /* 695231200Smm * Read Root Directory 696231200Smm */ 697231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 698231200Smm assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae)); 699231200Smm assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae)); 700231200Smm assertEqualString(".", archive_entry_pathname(ae)); 701231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 702231200Smm assertEqualInt(2048, archive_entry_size(ae)); 703231200Smm 704231200Smm /* 705231200Smm * Read "rr_moved" 706231200Smm */ 707231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 708231200Smm assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae)); 709231200Smm assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae)); 710231200Smm assertEqualString("RR_MOVED", archive_entry_pathname(ae)); 711231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 712231200Smm assertEqualInt(2048, archive_entry_size(ae)); 713231200Smm 714231200Smm /* 715231200Smm * Read "rr_moved/dir7" 716231200Smm */ 717231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 718231200Smm assertEqualInt(5, archive_entry_atime(ae)); 719231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 720231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 721231200Smm assertEqualString("RR_MOVED/DIR7", archive_entry_pathname(ae)); 722231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 723231200Smm assertEqualInt(2048, archive_entry_size(ae)); 724231200Smm 725231200Smm /* 726231200Smm * Read "rr_moved/dir7/dir8" 727231200Smm */ 728231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 729231200Smm assertEqualInt(5, archive_entry_atime(ae)); 730231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 731231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 732231200Smm assertEqualString("RR_MOVED/DIR7/DIR8", archive_entry_pathname(ae)); 733231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 734231200Smm assertEqualInt(2048, archive_entry_size(ae)); 735231200Smm 736231200Smm /* 737231200Smm * Read "rr_moved/dir7/dir8/dir9" 738231200Smm */ 739231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 740231200Smm assertEqualInt(5, archive_entry_atime(ae)); 741231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 742231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 743231200Smm assertEqualString("RR_MOVED/DIR7/DIR8/DIR9", 744231200Smm archive_entry_pathname(ae)); 745231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 746231200Smm assertEqualInt(2048, archive_entry_size(ae)); 747231200Smm 748231200Smm /* 749231200Smm * Read "dir0" 750231200Smm */ 751231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 752231200Smm assertEqualInt(5, archive_entry_atime(ae)); 753231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 754231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 755231200Smm assertEqualString("DIR0", archive_entry_pathname(ae)); 756231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 757231200Smm assertEqualInt(2048, archive_entry_size(ae)); 758231200Smm 759231200Smm /* 760231200Smm * Read "dir0/dir1" 761231200Smm */ 762231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 763231200Smm assertEqualInt(5, archive_entry_atime(ae)); 764231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 765231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 766231200Smm assertEqualString("DIR0/DIR1", archive_entry_pathname(ae)); 767231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 768231200Smm assertEqualInt(2048, archive_entry_size(ae)); 769231200Smm 770231200Smm /* 771231200Smm * Read "dir0/dir1/dir2" 772231200Smm */ 773231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 774231200Smm assertEqualInt(5, archive_entry_atime(ae)); 775231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 776231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 777231200Smm assertEqualString("DIR0/DIR1/DIR2", archive_entry_pathname(ae)); 778231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 779231200Smm assertEqualInt(2048, archive_entry_size(ae)); 780231200Smm 781231200Smm /* 782231200Smm * Read "dir0/dir1/dir2/dir3" 783231200Smm */ 784231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 785231200Smm assertEqualInt(5, archive_entry_atime(ae)); 786231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 787231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 788231200Smm assertEqualString("DIR0/DIR1/DIR2/DIR3", 789231200Smm archive_entry_pathname(ae)); 790231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 791231200Smm assertEqualInt(2048, archive_entry_size(ae)); 792231200Smm 793231200Smm /* 794231200Smm * Read "dir0/dir1/dir2/dir3/dir4" 795231200Smm */ 796231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 797231200Smm assertEqualInt(5, archive_entry_atime(ae)); 798231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 799231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 800231200Smm assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4", 801231200Smm archive_entry_pathname(ae)); 802231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 803231200Smm assertEqualInt(2048, archive_entry_size(ae)); 804231200Smm 805231200Smm /* 806231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5" 807231200Smm */ 808231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 809231200Smm assertEqualInt(5, archive_entry_atime(ae)); 810231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 811231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 812231200Smm assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5", 813231200Smm archive_entry_pathname(ae)); 814231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 815231200Smm assertEqualInt(2048, archive_entry_size(ae)); 816231200Smm 817231200Smm /* 818231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6" 819231200Smm */ 820231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 821231200Smm assertEqualInt(5, archive_entry_atime(ae)); 822231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 823231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 824231200Smm assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5/DIR6", 825231200Smm archive_entry_pathname(ae)); 826231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 827231200Smm assertEqualInt(2048, archive_entry_size(ae)); 828231200Smm 829231200Smm /* 830231200Smm * Read "file" 831231200Smm */ 832231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 833231200Smm assertEqualInt(5, archive_entry_atime(ae)); 834231200Smm assertEqualInt(0, archive_entry_birthtime(ae)); 835231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 836231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 837231200Smm assertEqualString("FILE", archive_entry_pathname(ae)); 838231200Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 839231200Smm assertEqualInt(2, archive_entry_nlink(ae)); 840231200Smm assertEqualInt(8, archive_entry_size(ae)); 841231200Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 842231200Smm assertEqualMem(buff2, "12345678", 8); 843231200Smm 844231200Smm /* 845231200Smm * Read "hardlink" 846231200Smm */ 847231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 848231200Smm assertEqualInt(5, archive_entry_atime(ae)); 849231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 850231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 851231200Smm assertEqualString("HARDLNK", archive_entry_pathname(ae)); 852231200Smm assertEqualString("FILE", archive_entry_hardlink(ae)); 853231200Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 854231200Smm assertEqualInt(0, archive_entry_size(ae)); 855231200Smm assertEqualIntA(a, 0, archive_read_data(a, buff2, 10)); 856231200Smm 857231200Smm /* 858231200Smm * Read longname 859231200Smm */ 860231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 861231200Smm assert(archive_entry_atime_is_set(ae)); 862231200Smm assertEqualInt(5, archive_entry_atime(ae)); 863231200Smm assert(archive_entry_ctime_is_set(ae)); 864231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 865231200Smm assert(archive_entry_mtime_is_set(ae)); 866231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 867231200Smm assertEqualString("LONGNAME", archive_entry_pathname(ae)); 868231200Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 869231200Smm assertEqualInt(8, archive_entry_size(ae)); 870231200Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 871231200Smm assertEqualMem(buff2, "12345678", 8); 872231200Smm 873231200Smm /* 874231200Smm * Read "dir0/dir1/file1" 875231200Smm */ 876231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 877231200Smm assertEqualInt(5, archive_entry_atime(ae)); 878231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 879231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 880231200Smm assertEqualString("DIR0/DIR1/FILE1", archive_entry_pathname(ae)); 881231200Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 882231200Smm assertEqualInt(1, archive_entry_nlink(ae)); 883231200Smm assertEqualInt(8, archive_entry_size(ae)); 884231200Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 885231200Smm assertEqualMem(buff2, "12345678", 8); 886231200Smm 887231200Smm /* 888231200Smm * Read "dir0/dir1/file2" 889231200Smm */ 890231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 891231200Smm assertEqualInt(5, archive_entry_atime(ae)); 892231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 893231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 894231200Smm assertEqualString("DIR0/DIR1/FILE2", archive_entry_pathname(ae)); 895231200Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 896231200Smm assertEqualInt(1, archive_entry_nlink(ae)); 897231200Smm assertEqualInt(8, archive_entry_size(ae)); 898231200Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 899231200Smm assertEqualMem(buff2, "12345678", 8); 900231200Smm 901231200Smm /* 902231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7" as file 903231200Smm */ 904231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 905231200Smm assertEqualInt(5, archive_entry_atime(ae)); 906231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 907231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 908231200Smm assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5/DIR6/DIR7", 909231200Smm archive_entry_pathname(ae)); 910231200Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 911231200Smm assertEqualInt(0, archive_entry_size(ae)); 912231200Smm 913231200Smm /* 914231200Smm * Read "symlnk" 915231200Smm */ 916231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 917231200Smm assert(archive_entry_atime_is_set(ae)); 918231200Smm assertEqualInt(5, archive_entry_atime(ae)); 919231200Smm assert(!archive_entry_birthtime_is_set(ae)); 920231200Smm assertEqualInt(0, archive_entry_birthtime(ae)); 921231200Smm assert(archive_entry_ctime_is_set(ae)); 922231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 923231200Smm assert(archive_entry_mtime_is_set(ae)); 924231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 925231200Smm assertEqualString("SYMLNK", archive_entry_pathname(ae)); 926231200Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 927231200Smm assertEqualInt(0, archive_entry_size(ae)); 928231200Smm 929231200Smm /* 930231200Smm * Verify the end of the archive. 931231200Smm */ 932231200Smm assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 933231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); 934231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a)); 935231200Smm 936231200Smm free(buff); 937231200Smm} 938