1228753Smm/*- 2228753Smm * Copyright (c) 2003-2008 Tim Kientzle 3228753Smm * Copyright (c) 2009,2010 Michihiro NAKAJIMA 4228753Smm * All rights reserved. 5228753Smm * 6228753Smm * Redistribution and use in source and binary forms, with or without 7228753Smm * modification, are permitted provided that the following conditions 8228753Smm * are met: 9228753Smm * 1. Redistributions of source code must retain the above copyright 10228753Smm * notice, this list of conditions and the following disclaimer. 11228753Smm * 2. Redistributions in binary form must reproduce the above copyright 12228753Smm * notice, this list of conditions and the following disclaimer in the 13228753Smm * documentation and/or other materials provided with the distribution. 14228753Smm * 15228753Smm * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 16228753Smm * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17228753Smm * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18228753Smm * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 19228753Smm * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20228753Smm * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21228753Smm * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22228753Smm * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23228753Smm * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24228753Smm * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25228753Smm */ 26228753Smm#include "test.h" 27248590Smm__FBSDID("$FreeBSD$"); 28238825Smm 29238825Smmstatic char buff2[64]; 30238825SmmDEFINE_TEST(test_write_format_iso9660) 31231200Smm{ 32231200Smm size_t buffsize = 1000000; 33231200Smm char *buff; 34228753Smm struct archive_entry *ae; 35231200Smm struct archive *a; 36231200Smm char dirname[1024]; 37231200Smm char dir[6]; 38238825Smm char longname[] = 39238825Smm "longname00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 40238825Smm "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" 41238825Smm "cccccccccccccccccccccccccccccccccccccccccccccccccc" 42238825Smm "dddddddddddddddddddddddddddddddddddddddddddddddddd"; 43238825Smm 44238825Smm size_t used; 45238825Smm int i; 46238825Smm 47238825Smm buff = malloc(buffsize); /* million bytes of work area */ 48314565Smm assert(buff != NULL); 49314565Smm 50314565Smm /* Create a new archive in memory. */ 51231200Smm assert((a = archive_write_new()) != NULL); 52228753Smm assertA(0 == archive_write_set_format_iso9660(a)); 53231200Smm assertA(0 == archive_write_add_filter_none(a)); 54231200Smm assertA(0 == archive_write_open_memory(a, buff, buffsize, &used)); 55231200Smm 56228753Smm /* 57228753Smm * "file" has a bunch of attributes and 8 bytes of data. 58228753Smm */ 59316338Smm assert((ae = archive_entry_new()) != NULL); 60316338Smm archive_entry_set_atime(ae, 2, 20); 61314571Smm archive_entry_set_birthtime(ae, 3, 30); 62314571Smm archive_entry_set_ctime(ae, 4, 40); 63314571Smm archive_entry_set_mtime(ae, 5, 50); 64314571Smm archive_entry_copy_pathname(ae, "file"); 65314571Smm archive_entry_set_mode(ae, AE_IFREG | 0755); 66314571Smm archive_entry_set_size(ae, 8); 67314571Smm archive_entry_set_nlink(ae, 2); 68314571Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 69314571Smm archive_entry_free(ae); 70316338Smm assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9)); 71316338Smm 72316338Smm /* 73316338Smm * "hardlnk" has linked to "file". 74316338Smm */ 75316338Smm assert((ae = archive_entry_new()) != NULL); 76316338Smm archive_entry_set_atime(ae, 2, 20); 77316338Smm archive_entry_set_birthtime(ae, 3, 30); 78316338Smm archive_entry_set_ctime(ae, 4, 40); 79316338Smm archive_entry_set_mtime(ae, 5, 50); 80316338Smm archive_entry_copy_pathname(ae, "hardlnk"); 81316338Smm archive_entry_set_mode(ae, AE_IFREG | 0755); 82316338Smm archive_entry_set_hardlink(ae, "file"); 83316338Smm archive_entry_set_nlink(ae, 2); 84316338Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 85314571Smm archive_entry_free(ae); 86314571Smm 87314571Smm /* 88228753Smm * longname is similar but has birthtime later than mtime. 89228753Smm */ 90228753Smm assert((ae = archive_entry_new()) != NULL); 91228753Smm archive_entry_set_atime(ae, 2, 20); 92228753Smm archive_entry_set_birthtime(ae, 8, 80); 93228753Smm archive_entry_set_ctime(ae, 4, 40); 94228753Smm archive_entry_set_mtime(ae, 5, 50); 95228753Smm archive_entry_copy_pathname(ae, longname); 96228753Smm archive_entry_set_mode(ae, AE_IFREG | 0666); 97228753Smm archive_entry_set_size(ae, 8); 98228753Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 99228753Smm archive_entry_free(ae); 100228753Smm assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9)); 101228753Smm 102228753Smm /* 103228753Smm * "symlnk has symbolic linked to longname. 104228753Smm */ 105228753Smm assert((ae = archive_entry_new()) != NULL); 106228753Smm archive_entry_set_atime(ae, 2, 20); 107228753Smm archive_entry_set_ctime(ae, 4, 40); 108228753Smm archive_entry_set_mtime(ae, 5, 50); 109248590Smm archive_entry_copy_pathname(ae, "symlnk"); 110228753Smm archive_entry_set_mode(ae, AE_IFLNK | 0555); 111228753Smm archive_entry_set_symlink(ae, longname); 112228753Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 113228753Smm archive_entry_free(ae); 114228753Smm 115228753Smm /* 116228753Smm * "dir*" has a bunch of attributes. 117228753Smm */ 118228753Smm dirname[0] = '\0'; 119228753Smm strcpy(dir, "/dir0"); 120228753Smm for (i = 0; i < 13; i++) { 121228753Smm dir[4] = "0123456789ABCDEF"[i]; 122231200Smm if (i == 0) 123228753Smm strcat(dirname, dir+1); 124228753Smm else 125228753Smm strcat(dirname, dir); 126228753Smm assert((ae = archive_entry_new()) != NULL); 127228753Smm archive_entry_set_atime(ae, 2, 20); 128228753Smm archive_entry_set_birthtime(ae, 3, 30); 129228753Smm archive_entry_set_ctime(ae, 4, 40); 130228753Smm archive_entry_set_mtime(ae, 5, 50); 131228753Smm archive_entry_copy_pathname(ae, dirname); 132228753Smm archive_entry_set_mode(ae, S_IFDIR | 0755); 133228753Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 134228753Smm archive_entry_free(ae); 135228753Smm } 136228753Smm 137228753Smm strcat(dirname, "/file"); 138228753Smm assert((ae = archive_entry_new()) != NULL); 139228753Smm archive_entry_set_atime(ae, 2, 20); 140228753Smm archive_entry_set_birthtime(ae, 3, 30); 141228753Smm archive_entry_set_ctime(ae, 4, 40); 142228753Smm archive_entry_set_mtime(ae, 5, 50); 143228753Smm archive_entry_copy_pathname(ae, dirname); 144228753Smm archive_entry_set_mode(ae, S_IFREG | 0755); 145228753Smm archive_entry_set_size(ae, 8); 146228753Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 147307214Smm archive_entry_free(ae); 148307214Smm assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9)); 149307214Smm 150307214Smm /* 151307214Smm * "dir0/dir1/file1" has 8 bytes of data. 152307214Smm */ 153307214Smm assert((ae = archive_entry_new()) != NULL); 154299425Smm archive_entry_set_atime(ae, 2, 20); 155299425Smm archive_entry_set_birthtime(ae, 3, 30); 156299425Smm archive_entry_set_ctime(ae, 4, 40); 157299425Smm archive_entry_set_mtime(ae, 5, 50); 158299425Smm archive_entry_copy_pathname(ae, "dir0/dir1/file1"); 159299425Smm archive_entry_set_mode(ae, AE_IFREG | 0755); 160299425Smm archive_entry_set_size(ae, 8); 161299425Smm archive_entry_set_nlink(ae, 1); 162299425Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 163299425Smm archive_entry_free(ae); 164228753Smm assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9)); 165238825Smm 166238825Smm /* 167238825Smm * "dir0/dir1/file2" has 8 bytes of data. 168238825Smm */ 169238825Smm assert((ae = archive_entry_new()) != NULL); 170238825Smm archive_entry_set_atime(ae, 2, 20); 171238825Smm archive_entry_set_birthtime(ae, 3, 30); 172238825Smm archive_entry_set_ctime(ae, 4, 40); 173228753Smm archive_entry_set_mtime(ae, 5, 50); 174228753Smm archive_entry_copy_pathname(ae, "dir0/dir1/file2"); 175228753Smm archive_entry_set_mode(ae, AE_IFREG | 0755); 176228753Smm archive_entry_set_size(ae, 8); 177228753Smm archive_entry_set_nlink(ae, 1); 178228753Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 179228753Smm archive_entry_free(ae); 180228753Smm assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9)); 181228753Smm 182228753Smm /* 183228753Smm * Add a wrong path "dir0/dir1/file2/wrong" 184228753Smm */ 185228753Smm assert((ae = archive_entry_new()) != NULL); 186228753Smm archive_entry_set_atime(ae, 2, 20); 187228753Smm archive_entry_set_birthtime(ae, 3, 30); 188228753Smm archive_entry_set_ctime(ae, 4, 40); 189228753Smm archive_entry_set_mtime(ae, 5, 50); 190228753Smm archive_entry_copy_pathname(ae, "dir0/dir1/file2/wrong"); 191228753Smm archive_entry_set_mode(ae, AE_IFREG | 0755); 192228753Smm archive_entry_set_size(ae, 8); 193228753Smm archive_entry_set_nlink(ae, 1); 194228753Smm assertEqualIntA(a, ARCHIVE_FAILED, archive_write_header(a, ae)); 195228753Smm archive_entry_free(ae); 196228753Smm 197228753Smm /* Close out the archive. */ 198228753Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a)); 199228753Smm assertEqualIntA(a, ARCHIVE_OK, archive_write_free(a)); 200228753Smm 201228753Smm /* 202228753Smm * ----------------------------------------------------------- 203228753Smm * Now, read the data back(read Rockridge extensions). 204228753Smm * ----------------------------------------------------------- 205228753Smm */ 206228753Smm assert((a = archive_read_new()) != NULL); 207228753Smm assertEqualIntA(a, 0, archive_read_support_format_all(a)); 208228753Smm assertEqualIntA(a, 0, archive_read_support_filter_all(a)); 209228753Smm assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used)); 210228753Smm 211238825Smm /* 212228753Smm * Read Root Directory 213228753Smm */ 214228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 215228753Smm assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae)); 216228753Smm assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae)); 217228753Smm assertEqualString(".", archive_entry_pathname(ae)); 218228753Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 219231200Smm assertEqualInt(2048, archive_entry_size(ae)); 220228753Smm 221228753Smm /* 222228753Smm * Read "dir0" 223228753Smm */ 224228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 225228753Smm assertEqualInt(2, archive_entry_atime(ae)); 226228753Smm assertEqualInt(3, archive_entry_birthtime(ae)); 227228753Smm assertEqualInt(4, archive_entry_ctime(ae)); 228299425Smm assertEqualInt(5, archive_entry_mtime(ae)); 229228753Smm assertEqualString("dir0", archive_entry_pathname(ae)); 230228753Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 231228753Smm assertEqualInt(2048, archive_entry_size(ae)); 232228753Smm 233228753Smm /* 234228753Smm * Read "dir0/dir1" 235313071Smm */ 236313071Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 237313071Smm assertEqualInt(2, archive_entry_atime(ae)); 238313071Smm assertEqualInt(3, archive_entry_birthtime(ae)); 239313071Smm assertEqualInt(4, archive_entry_ctime(ae)); 240313071Smm assertEqualInt(5, archive_entry_mtime(ae)); 241228753Smm assertEqualString("dir0/dir1", archive_entry_pathname(ae)); 242228753Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 243228753Smm assertEqualInt(2048, archive_entry_size(ae)); 244228753Smm 245228753Smm /* 246228753Smm * Read "dir0/dir1/dir2" 247228753Smm */ 248228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 249228753Smm assertEqualInt(2, archive_entry_atime(ae)); 250228753Smm assertEqualInt(3, archive_entry_birthtime(ae)); 251228753Smm assertEqualInt(4, archive_entry_ctime(ae)); 252228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 253228753Smm assertEqualString("dir0/dir1/dir2", archive_entry_pathname(ae)); 254231200Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 255231200Smm assertEqualInt(2048, archive_entry_size(ae)); 256228753Smm 257228753Smm /* 258228753Smm * Read "dir0/dir1/dir2/dir3" 259228753Smm */ 260228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 261228753Smm assertEqualInt(2, archive_entry_atime(ae)); 262228753Smm assertEqualInt(3, archive_entry_birthtime(ae)); 263228753Smm assertEqualInt(4, archive_entry_ctime(ae)); 264228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 265228753Smm assertEqualString("dir0/dir1/dir2/dir3", 266228753Smm archive_entry_pathname(ae)); 267228753Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 268228753Smm assertEqualInt(2048, archive_entry_size(ae)); 269228753Smm 270228753Smm /* 271228753Smm * Read "dir0/dir1/dir2/dir3/dir4" 272228753Smm */ 273228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 274228753Smm assertEqualInt(2, archive_entry_atime(ae)); 275228753Smm assertEqualInt(3, archive_entry_birthtime(ae)); 276228753Smm assertEqualInt(4, archive_entry_ctime(ae)); 277228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 278228753Smm assertEqualString("dir0/dir1/dir2/dir3/dir4", 279228753Smm archive_entry_pathname(ae)); 280228753Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 281228753Smm assertEqualInt(2048, archive_entry_size(ae)); 282228753Smm 283228753Smm /* 284228753Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5" 285228753Smm */ 286228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 287228753Smm assertEqualInt(2, archive_entry_atime(ae)); 288228753Smm assertEqualInt(3, archive_entry_birthtime(ae)); 289228753Smm assertEqualInt(4, archive_entry_ctime(ae)); 290228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 291228753Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5", 292228753Smm archive_entry_pathname(ae)); 293228753Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 294228753Smm assertEqualInt(2048, archive_entry_size(ae)); 295228753Smm 296228753Smm /* 297228753Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6" 298228753Smm */ 299228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 300228753Smm assertEqualInt(2, archive_entry_atime(ae)); 301228753Smm assertEqualInt(3, archive_entry_birthtime(ae)); 302228753Smm assertEqualInt(4, archive_entry_ctime(ae)); 303228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 304228753Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6", 305228753Smm archive_entry_pathname(ae)); 306228753Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 307228753Smm assertEqualInt(2048, archive_entry_size(ae)); 308228753Smm 309228753Smm /* 310228753Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7" 311228753Smm */ 312228753Smm 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", 318231200Smm archive_entry_pathname(ae)); 319231200Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 320231200Smm assertEqualInt(2048, archive_entry_size(ae)); 321228753Smm 322228753Smm /* 323228753Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8" 324228753Smm */ 325228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 326228753Smm assertEqualInt(2, archive_entry_atime(ae)); 327228753Smm assertEqualInt(3, archive_entry_birthtime(ae)); 328228753Smm assertEqualInt(4, archive_entry_ctime(ae)); 329228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 330228753Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8", 331228753Smm archive_entry_pathname(ae)); 332231200Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 333228753Smm assertEqualInt(2048, archive_entry_size(ae)); 334231200Smm 335231200Smm /* 336231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9" 337228753Smm */ 338231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 339231200Smm assertEqualInt(2, archive_entry_atime(ae)); 340228753Smm assertEqualInt(3, archive_entry_birthtime(ae)); 341228753Smm assertEqualInt(4, archive_entry_ctime(ae)); 342228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 343228753Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9", 344228753Smm archive_entry_pathname(ae)); 345228753Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 346228753Smm assertEqualInt(2048, archive_entry_size(ae)); 347228753Smm 348228753Smm /* 349228753Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA" 350228753Smm */ 351228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 352228753Smm assertEqualInt(2, archive_entry_atime(ae)); 353228753Smm assertEqualInt(3, archive_entry_birthtime(ae)); 354228753Smm assertEqualInt(4, archive_entry_ctime(ae)); 355228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 356228753Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA", 357228753Smm archive_entry_pathname(ae)); 358228753Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 359228753Smm assertEqualInt(2048, archive_entry_size(ae)); 360228753Smm 361228753Smm /* 362228753Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB" 363228753Smm */ 364228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 365228753Smm assertEqualInt(2, archive_entry_atime(ae)); 366231200Smm assertEqualInt(3, archive_entry_birthtime(ae)); 367228753Smm assertEqualInt(4, archive_entry_ctime(ae)); 368228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 369228753Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB", 370228753Smm archive_entry_pathname(ae)); 371228753Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 372228753Smm assertEqualInt(2048, archive_entry_size(ae)); 373228753Smm 374228753Smm /* 375228753Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC" 376231200Smm */ 377228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 378228753Smm assertEqualInt(2, archive_entry_atime(ae)); 379228753Smm assertEqualInt(3, archive_entry_birthtime(ae)); 380228753Smm assertEqualInt(4, archive_entry_ctime(ae)); 381228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 382228753Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC", 383228753Smm archive_entry_pathname(ae)); 384228753Smm assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 385228753Smm assertEqualInt(2048, archive_entry_size(ae)); 386228753Smm 387228753Smm /* 388228753Smm * Read "hardlnk" 389228753Smm */ 390228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 391228753Smm assertEqualInt(2, archive_entry_atime(ae)); 392228753Smm assertEqualInt(3, archive_entry_birthtime(ae)); 393228753Smm assertEqualInt(4, archive_entry_ctime(ae)); 394228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 395228753Smm assertEqualString("hardlnk", archive_entry_pathname(ae)); 396228753Smm assert((AE_IFREG | 0555) == archive_entry_mode(ae)); 397228753Smm assertEqualInt(2, archive_entry_nlink(ae)); 398228753Smm assertEqualInt(8, archive_entry_size(ae)); 399228753Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 400228753Smm assertEqualMem(buff2, "12345678", 8); 401228753Smm 402228753Smm /* 403228753Smm * Read "file" 404228753Smm */ 405228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 406228753Smm assertEqualInt(2, archive_entry_atime(ae)); 407228753Smm assertEqualInt(3, archive_entry_birthtime(ae)); 408228753Smm assertEqualInt(4, archive_entry_ctime(ae)); 409228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 410228753Smm assertEqualString("file", archive_entry_pathname(ae)); 411228753Smm assertEqualString("hardlnk", archive_entry_hardlink(ae)); 412228753Smm assert((AE_IFREG | 0555) == archive_entry_mode(ae)); 413228753Smm assertEqualInt(2, archive_entry_nlink(ae)); 414228753Smm assertEqualInt(0, archive_entry_size(ae)); 415228753Smm 416228753Smm /* 417228753Smm * Read longname 418228753Smm */ 419228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 420228753Smm assert(archive_entry_atime_is_set(ae)); 421231200Smm assertEqualInt(2, archive_entry_atime(ae)); 422231200Smm /* Birthtime > mtime above, so it doesn't get stored at all. */ 423228753Smm assert(!archive_entry_birthtime_is_set(ae)); 424231200Smm assertEqualInt(0, archive_entry_birthtime(ae)); 425228753Smm assert(archive_entry_ctime_is_set(ae)); 426228753Smm assertEqualInt(4, archive_entry_ctime(ae)); 427228753Smm assert(archive_entry_mtime_is_set(ae)); 428228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 429228753Smm assertEqualString(longname, archive_entry_pathname(ae)); 430228753Smm#if !defined(_WIN32) && !defined(__CYGWIN__) 431228753Smm assert((AE_IFREG | 0444) == archive_entry_mode(ae)); 432228753Smm#else 433228753Smm /* On Windows and CYGWIN, always set all exec bit ON by default. */ 434228753Smm assert((AE_IFREG | 0555) == archive_entry_mode(ae)); 435228753Smm#endif 436228753Smm assertEqualInt(8, archive_entry_size(ae)); 437228753Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 438228753Smm assertEqualMem(buff2, "12345678", 8); 439228753Smm 440228753Smm /* 441228753Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC/file" 442228753Smm */ 443228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 444231200Smm assertEqualInt(2, archive_entry_atime(ae)); 445231200Smm assertEqualInt(3, archive_entry_birthtime(ae)); 446231200Smm assertEqualInt(4, archive_entry_ctime(ae)); 447228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 448231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC/file", archive_entry_pathname(ae)); 449228753Smm assert((AE_IFREG | 0555) == archive_entry_mode(ae)); 450228753Smm assertEqualInt(1, archive_entry_nlink(ae)); 451228753Smm assertEqualInt(8, archive_entry_size(ae)); 452231200Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 453228753Smm assertEqualMem(buff2, "12345678", 8); 454228753Smm 455228753Smm /* 456228753Smm * Read "dir0/dir1/file1" 457228753Smm */ 458228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 459228753Smm assertEqualInt(2, archive_entry_atime(ae)); 460228753Smm assertEqualInt(3, archive_entry_birthtime(ae)); 461228753Smm assertEqualInt(4, archive_entry_ctime(ae)); 462228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 463228753Smm assertEqualString("dir0/dir1/file1", archive_entry_pathname(ae)); 464228753Smm assert((AE_IFREG | 0555) == archive_entry_mode(ae)); 465228753Smm assertEqualInt(1, archive_entry_nlink(ae)); 466228753Smm assertEqualInt(8, archive_entry_size(ae)); 467228753Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 468228753Smm assertEqualMem(buff2, "12345678", 8); 469228753Smm 470228753Smm /* 471228753Smm * Read "dir0/dir1/file2" 472228753Smm */ 473228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 474228753Smm assertEqualInt(2, archive_entry_atime(ae)); 475228753Smm assertEqualInt(3, archive_entry_birthtime(ae)); 476228753Smm assertEqualInt(4, archive_entry_ctime(ae)); 477228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 478228753Smm assertEqualString("dir0/dir1/file2", archive_entry_pathname(ae)); 479228753Smm assert((AE_IFREG | 0555) == archive_entry_mode(ae)); 480228753Smm assertEqualInt(1, archive_entry_nlink(ae)); 481228753Smm assertEqualInt(8, archive_entry_size(ae)); 482228753Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 483228753Smm assertEqualMem(buff2, "12345678", 8); 484228753Smm 485228753Smm /* 486228753Smm * Read "symlnk" 487228753Smm */ 488228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 489228753Smm assert(archive_entry_atime_is_set(ae)); 490228753Smm assertEqualInt(2, archive_entry_atime(ae)); 491228753Smm assert(!archive_entry_birthtime_is_set(ae)); 492228753Smm assertEqualInt(0, archive_entry_birthtime(ae)); 493228753Smm assert(archive_entry_ctime_is_set(ae)); 494228753Smm assertEqualInt(4, archive_entry_ctime(ae)); 495228753Smm assert(archive_entry_mtime_is_set(ae)); 496228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 497228753Smm assertEqualString("symlnk", archive_entry_pathname(ae)); 498228753Smm assert((AE_IFLNK | 0555) == archive_entry_mode(ae)); 499228753Smm assertEqualString(longname, archive_entry_symlink(ae)); 500228753Smm 501228753Smm /* 502228753Smm * Verify the end of the archive. 503231200Smm */ 504231200Smm assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 505231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); 506231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a)); 507231200Smm 508228753Smm /* 509231200Smm * ----------------------------------------------------------- 510231200Smm * Now, read the data back without Rockridge option 511231200Smm * (read Joliet extensions). 512231200Smm * ----------------------------------------------------------- 513231200Smm */ 514231200Smm assert((a = archive_read_new()) != NULL); 515231200Smm assertEqualIntA(a, 0, archive_read_support_format_all(a)); 516231200Smm assertEqualIntA(a, 0, archive_read_support_filter_all(a)); 517231200Smm /* Disable Rockridge extensions support. */ 518231200Smm assertEqualInt(ARCHIVE_OK, 519231200Smm archive_read_set_option(a, NULL, "rockridge", NULL)); 520231200Smm assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used)); 521231200Smm 522231200Smm /* 523231200Smm * Read Root Directory 524231200Smm */ 525231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 526231200Smm assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae)); 527231200Smm assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae)); 528231200Smm assertEqualString(".", archive_entry_pathname(ae)); 529231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 530231200Smm assertEqualInt(2048, archive_entry_size(ae)); 531231200Smm 532231200Smm /* 533231200Smm * Read "dir0" 534231200Smm */ 535231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 536231200Smm assertEqualInt(5, archive_entry_atime(ae)); 537231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 538231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 539231200Smm assertEqualString("dir0", archive_entry_pathname(ae)); 540231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 541231200Smm assertEqualInt(2048, archive_entry_size(ae)); 542231200Smm 543231200Smm /* 544309587Smm * Read "dir0/dir1" 545231200Smm */ 546231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 547231200Smm assertEqualInt(5, archive_entry_atime(ae)); 548231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 549231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 550231200Smm assertEqualString("dir0/dir1", archive_entry_pathname(ae)); 551231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 552231200Smm assertEqualInt(2048, archive_entry_size(ae)); 553231200Smm 554231200Smm /* 555231200Smm * Read "dir0/dir1/dir2" 556231200Smm */ 557231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 558231200Smm assertEqualInt(5, archive_entry_atime(ae)); 559231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 560231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 561231200Smm assertEqualString("dir0/dir1/dir2", archive_entry_pathname(ae)); 562231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 563231200Smm assertEqualInt(2048, archive_entry_size(ae)); 564231200Smm 565231200Smm /* 566231200Smm * Read "dir0/dir1/dir2/dir3" 567231200Smm */ 568231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 569231200Smm assertEqualInt(5, archive_entry_atime(ae)); 570231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 571231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 572231200Smm assertEqualString("dir0/dir1/dir2/dir3", 573231200Smm archive_entry_pathname(ae)); 574231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 575231200Smm assertEqualInt(2048, archive_entry_size(ae)); 576231200Smm 577231200Smm /* 578231200Smm * Read "dir0/dir1/dir2/dir3/dir4" 579231200Smm */ 580231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 581231200Smm assertEqualInt(5, archive_entry_atime(ae)); 582231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 583309587Smm assertEqualInt(5, archive_entry_mtime(ae)); 584231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4", 585231200Smm archive_entry_pathname(ae)); 586231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 587231200Smm assertEqualInt(2048, archive_entry_size(ae)); 588231200Smm 589231200Smm /* 590231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5" 591231200Smm */ 592231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 593231200Smm assertEqualInt(5, archive_entry_atime(ae)); 594228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 595228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 596231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5", 597228753Smm archive_entry_pathname(ae)); 598231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 599228753Smm assertEqualInt(2048, archive_entry_size(ae)); 600228753Smm 601228753Smm /* 602228753Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6" 603228753Smm */ 604228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 605299425Smm assertEqualInt(5, archive_entry_atime(ae)); 606299425Smm assertEqualInt(5, archive_entry_ctime(ae)); 607299425Smm assertEqualInt(5, archive_entry_mtime(ae)); 608299425Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6", 609228753Smm archive_entry_pathname(ae)); 610228753Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 611228753Smm assertEqualInt(2048, archive_entry_size(ae)); 612228753Smm 613228753Smm /* 614228753Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7" 615228753Smm */ 616228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 617231200Smm assertEqualInt(5, archive_entry_atime(ae)); 618231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 619231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 620231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7", 621231200Smm archive_entry_pathname(ae)); 622231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 623231200Smm assertEqualInt(2048, archive_entry_size(ae)); 624231200Smm 625231200Smm /* 626231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8" 627231200Smm */ 628231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 629231200Smm assertEqualInt(5, archive_entry_atime(ae)); 630231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 631231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 632231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8", 633231200Smm archive_entry_pathname(ae)); 634231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 635231200Smm assertEqualInt(2048, archive_entry_size(ae)); 636231200Smm 637231200Smm /* 638231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9" 639231200Smm */ 640231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 641231200Smm assertEqualInt(5, archive_entry_atime(ae)); 642231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 643231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 644231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9", 645231200Smm archive_entry_pathname(ae)); 646231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 647231200Smm assertEqualInt(2048, archive_entry_size(ae)); 648228753Smm 649228753Smm /* 650228753Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA" 651228753Smm */ 652228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 653228753Smm assertEqualInt(5, archive_entry_atime(ae)); 654228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 655231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 656228753Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA", 657231200Smm archive_entry_pathname(ae)); 658231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 659228753Smm assertEqualInt(2048, archive_entry_size(ae)); 660228753Smm 661228753Smm /* 662228753Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB" 663248590Smm */ 664248590Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 665231200Smm assertEqualInt(5, archive_entry_atime(ae)); 666231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 667231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 668231200Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB", 669228753Smm archive_entry_pathname(ae)); 670228753Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 671228753Smm assertEqualInt(2048, archive_entry_size(ae)); 672228753Smm 673228753Smm /* 674228753Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC" 675228753Smm */ 676228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 677228753Smm assertEqualInt(5, archive_entry_atime(ae)); 678228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 679228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 680228753Smm assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC", 681228753Smm archive_entry_pathname(ae)); 682228753Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 683228753Smm assertEqualInt(2048, archive_entry_size(ae)); 684228753Smm 685228753Smm /* 686228753Smm * Read "file" 687228753Smm */ 688228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 689228753Smm assertEqualInt(5, archive_entry_atime(ae)); 690228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 691228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 692228753Smm assertEqualString("file", archive_entry_pathname(ae)); 693228753Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 694228753Smm assertEqualInt(8, archive_entry_size(ae)); 695228753Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 696228753Smm assertEqualMem(buff2, "12345678", 8); 697228753Smm 698228753Smm /* 699228753Smm * Read "hardlnk" 700228753Smm */ 701228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 702228753Smm assertEqualInt(5, archive_entry_atime(ae)); 703228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 704228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 705228753Smm assertEqualString("hardlnk", archive_entry_pathname(ae)); 706228753Smm assertEqualString("file", archive_entry_hardlink(ae)); 707228753Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 708228753Smm assertEqualInt(2, archive_entry_nlink(ae)); 709228753Smm assertEqualInt(0, archive_entry_size(ae)); 710228753Smm assertEqualIntA(a, 0, archive_read_data(a, buff2, 10)); 711228753Smm 712228753Smm /* 713228753Smm * Read longname 714228753Smm */ 715228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 716228753Smm assert(archive_entry_atime_is_set(ae)); 717228753Smm assertEqualInt(5, archive_entry_atime(ae)); 718228753Smm assert(archive_entry_ctime_is_set(ae)); 719228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 720231200Smm assert(archive_entry_mtime_is_set(ae)); 721228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 722231200Smm /* Trim longname to 64 characters. */ 723231200Smm longname[64] = '\0'; 724228753Smm assertEqualString(longname, archive_entry_pathname(ae)); 725228753Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 726228753Smm assertEqualInt(8, archive_entry_size(ae)); 727228753Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 728228753Smm assertEqualMem(buff2, "12345678", 8); 729228753Smm 730228753Smm /* 731228753Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC/file" 732228753Smm */ 733228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 734228753Smm assertEqualInt(5, archive_entry_atime(ae)); 735228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 736228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 737228753Smm assertEqualString( 738228753Smm "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC/file", 739228753Smm archive_entry_pathname(ae)); 740228753Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 741228753Smm assertEqualInt(1, archive_entry_nlink(ae)); 742228753Smm assertEqualInt(8, archive_entry_size(ae)); 743228753Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 744228753Smm assertEqualMem(buff2, "12345678", 8); 745228753Smm 746228753Smm /* 747228753Smm * Read "dir0/dir1/file1" 748228753Smm */ 749228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 750228753Smm assertEqualInt(5, archive_entry_atime(ae)); 751228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 752228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 753228753Smm assertEqualString("dir0/dir1/file1", archive_entry_pathname(ae)); 754228753Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 755228753Smm assertEqualInt(1, archive_entry_nlink(ae)); 756228753Smm assertEqualInt(8, archive_entry_size(ae)); 757228753Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 758228753Smm assertEqualMem(buff2, "12345678", 8); 759228753Smm 760228753Smm /* 761228753Smm * Read "dir0/dir1/file2" 762228753Smm */ 763228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 764228753Smm assertEqualInt(5, archive_entry_atime(ae)); 765228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 766228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 767228753Smm assertEqualString("dir0/dir1/file2", archive_entry_pathname(ae)); 768228753Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 769228753Smm assertEqualInt(1, archive_entry_nlink(ae)); 770228753Smm assertEqualInt(8, archive_entry_size(ae)); 771228753Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 772228753Smm assertEqualMem(buff2, "12345678", 8); 773228753Smm 774228753Smm /* 775228753Smm * Read "symlnk" 776228753Smm */ 777228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 778228753Smm assert(archive_entry_atime_is_set(ae)); 779228753Smm assertEqualInt(5, archive_entry_atime(ae)); 780228753Smm assert(!archive_entry_birthtime_is_set(ae)); 781228753Smm assertEqualInt(0, archive_entry_birthtime(ae)); 782228753Smm assert(archive_entry_ctime_is_set(ae)); 783228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 784228753Smm assert(archive_entry_mtime_is_set(ae)); 785228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 786228753Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 787248590Smm assertEqualInt(0, archive_entry_size(ae)); 788248590Smm 789228753Smm /* 790228753Smm * Verify the end of the archive. 791228753Smm */ 792228753Smm assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 793228753Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); 794228753Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a)); 795228753Smm 796228753Smm /* 797228753Smm * ----------------------------------------------------------- 798228753Smm * Now, read the data back without Rockridge and Joliet option 799228753Smm * (read ISO9660). 800228753Smm * This mode appears rr_moved directory. 801228753Smm * ----------------------------------------------------------- 802228753Smm */ 803231200Smm assert((a = archive_read_new()) != NULL); 804228753Smm assertEqualIntA(a, 0, archive_read_support_format_all(a)); 805231200Smm assertEqualIntA(a, 0, archive_read_support_filter_all(a)); 806228753Smm /* Disable Rockridge and Joliet extensions support. */ 807228753Smm assertEqualInt(ARCHIVE_OK, 808228753Smm archive_read_set_option(a, NULL, "rockridge", NULL)); 809228753Smm assertEqualInt(ARCHIVE_OK, 810228753Smm archive_read_set_option(a, NULL, "joliet", NULL)); 811299425Smm assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used)); 812299425Smm 813299425Smm /* 814299425Smm * Read Root Directory 815299425Smm */ 816299425Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 817299425Smm assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae)); 818299425Smm assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae)); 819299425Smm assertEqualString(".", archive_entry_pathname(ae)); 820299425Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 821299425Smm assertEqualInt(2048, archive_entry_size(ae)); 822299425Smm 823299425Smm /* 824299425Smm * Read "rr_moved" 825299425Smm */ 826299425Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 827299425Smm assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae)); 828299425Smm assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae)); 829299425Smm assertEqualString("RR_MOVED", archive_entry_pathname(ae)); 830299425Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 831299425Smm assertEqualInt(2048, archive_entry_size(ae)); 832299425Smm 833299425Smm /* 834299425Smm * Read "rr_moved/dir7" 835299425Smm */ 836299425Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 837299425Smm assertEqualInt(5, archive_entry_atime(ae)); 838299425Smm assertEqualInt(5, archive_entry_ctime(ae)); 839228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 840228753Smm assertEqualString("RR_MOVED/DIR7", archive_entry_pathname(ae)); 841231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 842228753Smm assertEqualInt(2048, archive_entry_size(ae)); 843228753Smm 844228753Smm /* 845228753Smm * Read "rr_moved/dir7/dir8" 846228753Smm */ 847228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 848231200Smm assertEqualInt(5, archive_entry_atime(ae)); 849228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 850228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 851231200Smm assertEqualString("RR_MOVED/DIR7/DIR8", archive_entry_pathname(ae)); 852228753Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 853228753Smm assertEqualInt(2048, archive_entry_size(ae)); 854228753Smm 855228753Smm /* 856228753Smm * Read "rr_moved/dir7/dir8/dir9" 857228753Smm */ 858231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 859228753Smm assertEqualInt(5, archive_entry_atime(ae)); 860228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 861228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 862228753Smm assertEqualString("RR_MOVED/DIR7/DIR8/DIR9", 863228753Smm archive_entry_pathname(ae)); 864228753Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 865228753Smm assertEqualInt(2048, archive_entry_size(ae)); 866228753Smm 867228753Smm /* 868228753Smm * Read "rr_moved/dir7/dir8/dir9/dira" 869228753Smm */ 870228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 871228753Smm assertEqualInt(5, archive_entry_atime(ae)); 872228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 873228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 874228753Smm assertEqualString("RR_MOVED/DIR7/DIR8/DIR9/DIRA", 875228753Smm archive_entry_pathname(ae)); 876228753Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 877231200Smm assertEqualInt(2048, archive_entry_size(ae)); 878228753Smm 879228753Smm /* 880228753Smm * Read "rr_moved/dir7/dir8/dir9/dira/dirB" 881231200Smm */ 882228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 883228753Smm assertEqualInt(5, archive_entry_atime(ae)); 884231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 885228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 886228753Smm assertEqualString("RR_MOVED/DIR7/DIR8/DIR9/DIRA/DIRB", 887228753Smm archive_entry_pathname(ae)); 888228753Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 889231200Smm assertEqualInt(2048, archive_entry_size(ae)); 890228753Smm 891228753Smm /* 892228753Smm * Read "rr_moved/dir7/dir8/dir9/dirA/dirB/dirC" 893228753Smm */ 894228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 895228753Smm assertEqualInt(5, archive_entry_atime(ae)); 896228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 897228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 898228753Smm assertEqualString("RR_MOVED/DIR7/DIR8/DIR9/DIRA/DIRB/DIRC", 899231200Smm archive_entry_pathname(ae)); 900228753Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 901228753Smm assertEqualInt(2048, archive_entry_size(ae)); 902228753Smm 903228753Smm /* 904228753Smm * Read "dir0" 905228753Smm */ 906231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 907228753Smm assertEqualInt(5, archive_entry_atime(ae)); 908228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 909228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 910248590Smm assertEqualString("DIR0", archive_entry_pathname(ae)); 911248590Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 912248590Smm assertEqualInt(2048, archive_entry_size(ae)); 913248590Smm 914248590Smm /* 915228753Smm * Read "dir0/dir1" 916248590Smm */ 917248590Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 918228753Smm assertEqualInt(5, archive_entry_atime(ae)); 919228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 920228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 921228753Smm assertEqualString("DIR0/DIR1", archive_entry_pathname(ae)); 922228753Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 923228753Smm assertEqualInt(2048, archive_entry_size(ae)); 924228753Smm 925228753Smm /* 926228753Smm * Read "dir0/dir1/dir2" 927228753Smm */ 928228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 929228753Smm assertEqualInt(5, archive_entry_atime(ae)); 930231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 931228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 932228753Smm assertEqualString("DIR0/DIR1/DIR2", archive_entry_pathname(ae)); 933231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 934228753Smm assertEqualInt(2048, archive_entry_size(ae)); 935228753Smm 936228753Smm /* 937228753Smm * Read "dir0/dir1/dir2/dir3" 938228753Smm */ 939231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 940228753Smm assertEqualInt(5, archive_entry_atime(ae)); 941231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 942228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 943228753Smm assertEqualString("DIR0/DIR1/DIR2/DIR3", 944228753Smm archive_entry_pathname(ae)); 945228753Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 946228753Smm assertEqualInt(2048, archive_entry_size(ae)); 947228753Smm 948228753Smm /* 949228753Smm * Read "dir0/dir1/dir2/dir3/dir4" 950231200Smm */ 951231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 952228753Smm assertEqualInt(5, archive_entry_atime(ae)); 953228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 954228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 955228753Smm assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4", 956228753Smm archive_entry_pathname(ae)); 957231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 958228753Smm assertEqualInt(2048, archive_entry_size(ae)); 959231200Smm 960228753Smm /* 961228753Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5" 962228753Smm */ 963228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 964228753Smm assertEqualInt(5, archive_entry_atime(ae)); 965228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 966228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 967228753Smm assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5", 968231200Smm archive_entry_pathname(ae)); 969231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 970228753Smm assertEqualInt(2048, archive_entry_size(ae)); 971228753Smm 972228753Smm /* 973228753Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6" 974228753Smm */ 975231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 976228753Smm assertEqualInt(5, archive_entry_atime(ae)); 977228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 978228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 979228753Smm assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5/DIR6", 980228753Smm archive_entry_pathname(ae)); 981231200Smm assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 982228753Smm assertEqualInt(2048, archive_entry_size(ae)); 983228753Smm 984228753Smm /* 985231200Smm * Read "hardlink" 986228753Smm */ 987231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 988228753Smm assertEqualInt(5, archive_entry_atime(ae)); 989228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 990228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 991248590Smm assertEqualString("HARDLNK", archive_entry_pathname(ae)); 992228753Smm assertEqualString(NULL, archive_entry_hardlink(ae)); 993228753Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 994228753Smm assertEqualInt(8, archive_entry_size(ae)); 995228753Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 996228753Smm assertEqualMem(buff2, "12345678", 8); 997231200Smm 998228753Smm /* 999228753Smm * Read "file" 1000228753Smm */ 1001228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 1002228753Smm assertEqualInt(5, archive_entry_atime(ae)); 1003231200Smm assertEqualInt(0, archive_entry_birthtime(ae)); 1004228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 1005231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 1006228753Smm assertEqualString("FILE", archive_entry_pathname(ae)); 1007228753Smm assertEqualString("HARDLNK", archive_entry_hardlink(ae)); 1008228753Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 1009228753Smm assertEqualInt(2, archive_entry_nlink(ae)); 1010228753Smm assertEqualInt(0, archive_entry_size(ae)); 1011228753Smm assertEqualIntA(a, 0, archive_read_data(a, buff2, 10)); 1012231200Smm 1013228753Smm 1014228753Smm /* 1015228753Smm * Read longname 1016228753Smm */ 1017228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 1018228753Smm assert(archive_entry_atime_is_set(ae)); 1019231200Smm assertEqualInt(5, archive_entry_atime(ae)); 1020228753Smm assert(archive_entry_ctime_is_set(ae)); 1021231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 1022231200Smm assert(archive_entry_mtime_is_set(ae)); 1023231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 1024231200Smm assertEqualString("LONGNAME", archive_entry_pathname(ae)); 1025231200Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 1026231200Smm assertEqualInt(8, archive_entry_size(ae)); 1027248590Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 1028228753Smm assertEqualMem(buff2, "12345678", 8); 1029248590Smm 1030228753Smm /* 1031228753Smm * Read "rr_moved/dir7/dir8/dir9/dirA/dirB/dirC/file" 1032228753Smm */ 1033228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 1034228753Smm assertEqualInt(5, archive_entry_atime(ae)); 1035228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 1036228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 1037228753Smm assertEqualString( 1038228753Smm "RR_MOVED/DIR7/DIR8/DIR9/DIRA/DIRB/DIRC/FILE", 1039228753Smm archive_entry_pathname(ae)); 1040228753Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 1041228753Smm assertEqualInt(1, archive_entry_nlink(ae)); 1042228753Smm assertEqualInt(8, archive_entry_size(ae)); 1043228753Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 1044228753Smm assertEqualMem(buff2, "12345678", 8); 1045228753Smm 1046228753Smm /* 1047228753Smm * Read "dir0/dir1/file1" 1048228753Smm */ 1049228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 1050228753Smm assertEqualInt(5, archive_entry_atime(ae)); 1051228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 1052228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 1053228753Smm assertEqualString("DIR0/DIR1/FILE1", archive_entry_pathname(ae)); 1054231200Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 1055228753Smm assertEqualInt(1, archive_entry_nlink(ae)); 1056231200Smm assertEqualInt(8, archive_entry_size(ae)); 1057228753Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 1058231200Smm assertEqualMem(buff2, "12345678", 8); 1059231200Smm 1060231200Smm /* 1061228753Smm * Read "dir0/dir1/file2" 1062228753Smm */ 1063228753Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 1064231200Smm assertEqualInt(5, archive_entry_atime(ae)); 1065228753Smm assertEqualInt(5, archive_entry_ctime(ae)); 1066228753Smm assertEqualInt(5, archive_entry_mtime(ae)); 1067228753Smm assertEqualString("DIR0/DIR1/FILE2", archive_entry_pathname(ae)); 1068228753Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 1069231200Smm assertEqualInt(1, archive_entry_nlink(ae)); 1070231200Smm assertEqualInt(8, archive_entry_size(ae)); 1071231200Smm assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 1072231200Smm assertEqualMem(buff2, "12345678", 8); 1073231200Smm 1074231200Smm /* 1075231200Smm * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7" as file 1076231200Smm */ 1077231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 1078231200Smm assertEqualInt(5, archive_entry_atime(ae)); 1079231200Smm assertEqualInt(5, archive_entry_ctime(ae)); 1080248590Smm assertEqualInt(5, archive_entry_mtime(ae)); 1081248590Smm assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5/DIR6/DIR7", 1082231200Smm archive_entry_pathname(ae)); 1083231200Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 1084231200Smm assertEqualInt(0, archive_entry_size(ae)); 1085231200Smm 1086231200Smm /* 1087231200Smm * Read "symlnk" 1088231200Smm */ 1089231200Smm assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 1090231200Smm assert(archive_entry_atime_is_set(ae)); 1091231200Smm assertEqualInt(5, archive_entry_atime(ae)); 1092231200Smm assert(!archive_entry_birthtime_is_set(ae)); 1093231200Smm assertEqualInt(0, archive_entry_birthtime(ae)); 1094248590Smm assert(archive_entry_ctime_is_set(ae)); 1095248590Smm assertEqualInt(5, archive_entry_ctime(ae)); 1096231200Smm assert(archive_entry_mtime_is_set(ae)); 1097231200Smm assertEqualInt(5, archive_entry_mtime(ae)); 1098231200Smm assertEqualString("SYMLNK", archive_entry_pathname(ae)); 1099248590Smm assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 1100248590Smm assertEqualInt(0, archive_entry_size(ae)); 1101248590Smm 1102248590Smm /* 1103248590Smm * Verify the end of the archive. 1104299425Smm */ 1105318483Smm assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 1106248590Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); 1107248590Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a)); 1108248590Smm 1109248590Smm free(buff); 1110248590Smm} 1111231200Smm