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