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