test_write_format_iso9660.c revision 302001
1155852Sgallatin/*- 2155852Sgallatin * Copyright (c) 2003-2008 Tim Kientzle 3155852Sgallatin * Copyright (c) 2009,2010 Michihiro NAKAJIMA 4155852Sgallatin * All rights reserved. 5155852Sgallatin * 6155852Sgallatin * Redistribution and use in source and binary forms, with or without 7155852Sgallatin * modification, are permitted provided that the following conditions 8155852Sgallatin * are met: 9155852Sgallatin * 1. Redistributions of source code must retain the above copyright 10155852Sgallatin * notice, this list of conditions and the following disclaimer. 11155852Sgallatin * 2. Redistributions in binary form must reproduce the above copyright 12155852Sgallatin * notice, this list of conditions and the following disclaimer in the 13155852Sgallatin * documentation and/or other materials provided with the distribution. 14155852Sgallatin * 15155852Sgallatin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 16155852Sgallatin * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17155852Sgallatin * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18155852Sgallatin * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 19155852Sgallatin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20155852Sgallatin * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21155852Sgallatin * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22155852Sgallatin * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23155852Sgallatin * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24155852Sgallatin * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25155852Sgallatin */ 26155852Sgallatin#include "test.h" 27155852Sgallatin__FBSDID("$FreeBSD$"); 28155852Sgallatin 29155852Sgallatinstatic char buff2[64]; 30155852SgallatinDEFINE_TEST(test_write_format_iso9660) 31155852Sgallatin{ 32155852Sgallatin size_t buffsize = 1000000; 33155852Sgallatin char *buff; 34176228Sbrueffer struct archive_entry *ae; 35159573Sbrueffer struct archive *a; 36155852Sgallatin char dirname[1024]; 37155852Sgallatin char dir[6]; 38159571Sgallatin char longname[] = 39155852Sgallatin "longname00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 40155852Sgallatin "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" 41155852Sgallatin "cccccccccccccccccccccccccccccccccccccccccccccccccc" 42155852Sgallatin "dddddddddddddddddddddddddddddddddddddddddddddddddd"; 43155852Sgallatin 44155852Sgallatin size_t used; 45155852Sgallatin int i; 46159571Sgallatin 47155852Sgallatin buff = malloc(buffsize); /* million bytes of work area */ 48155852Sgallatin assert(buff != NULL); 49155852Sgallatin 50159573Sbrueffer /* Create a new archive in memory. */ 51155852Sgallatin assert((a = archive_write_new()) != NULL); 52155852Sgallatin assertA(0 == archive_write_set_format_iso9660(a)); 53159571Sgallatin assertA(0 == archive_write_add_filter_none(a)); 54159571Sgallatin assertA(0 == archive_write_open_memory(a, buff, buffsize, &used)); 55159571Sgallatin 56176228Sbrueffer /* 57176228Sbrueffer * "file" has a bunch of attributes and 8 bytes of data. 58155852Sgallatin */ 59155852Sgallatin assert((ae = archive_entry_new()) != NULL); 60155852Sgallatin archive_entry_set_atime(ae, 2, 20); 61155852Sgallatin archive_entry_set_birthtime(ae, 3, 30); 62155852Sgallatin archive_entry_set_ctime(ae, 4, 40); 63155852Sgallatin archive_entry_set_mtime(ae, 5, 50); 64162331Sbrueffer archive_entry_copy_pathname(ae, "file"); 65176228Sbrueffer archive_entry_set_mode(ae, AE_IFREG | 0755); 66176228Sbrueffer archive_entry_set_size(ae, 8); 67162871Sru archive_entry_set_nlink(ae, 2); 68162871Sru assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 69155852Sgallatin archive_entry_free(ae); 70155852Sgallatin assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9)); 71155852Sgallatin 72155852Sgallatin /* 73155852Sgallatin * "hardlnk" has linked to "file". 74155852Sgallatin */ 75155852Sgallatin assert((ae = archive_entry_new()) != NULL); 76155852Sgallatin archive_entry_set_atime(ae, 2, 20); 77155852Sgallatin archive_entry_set_birthtime(ae, 3, 30); 78155852Sgallatin archive_entry_set_ctime(ae, 4, 40); 79155852Sgallatin archive_entry_set_mtime(ae, 5, 50); 80155852Sgallatin archive_entry_copy_pathname(ae, "hardlnk"); 81155852Sgallatin archive_entry_set_mode(ae, AE_IFREG | 0755); 82155852Sgallatin archive_entry_set_hardlink(ae, "file"); 83155852Sgallatin archive_entry_set_nlink(ae, 2); 84155852Sgallatin assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 85155852Sgallatin archive_entry_free(ae); 86159622Sbrueffer 87155852Sgallatin /* 88155852Sgallatin * longname is similar but has birthtime later than mtime. 89155852Sgallatin */ 90155852Sgallatin assert((ae = archive_entry_new()) != NULL); 91155852Sgallatin archive_entry_set_atime(ae, 2, 20); 92155852Sgallatin archive_entry_set_birthtime(ae, 8, 80); 93155852Sgallatin archive_entry_set_ctime(ae, 4, 40); 94155852Sgallatin archive_entry_set_mtime(ae, 5, 50); 95155852Sgallatin archive_entry_copy_pathname(ae, longname); 96155852Sgallatin archive_entry_set_mode(ae, AE_IFREG | 0666); 97155852Sgallatin archive_entry_set_size(ae, 8); 98155852Sgallatin assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 99155852Sgallatin archive_entry_free(ae); 100155852Sgallatin assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9)); 101155852Sgallatin 102155852Sgallatin /* 103159571Sgallatin * "symlnk has symbolic linked to longname. 104155852Sgallatin */ 105155852Sgallatin assert((ae = archive_entry_new()) != NULL); 106159571Sgallatin archive_entry_set_atime(ae, 2, 20); 107155852Sgallatin archive_entry_set_ctime(ae, 4, 40); 108159622Sbrueffer archive_entry_set_mtime(ae, 5, 50); 109159622Sbrueffer archive_entry_copy_pathname(ae, "symlnk"); 110159571Sgallatin archive_entry_set_mode(ae, AE_IFLNK | 0555); 111155852Sgallatin archive_entry_set_symlink(ae, longname); 112176228Sbrueffer assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 113159622Sbrueffer archive_entry_free(ae); 114162871Sru 115159622Sbrueffer /* 116159622Sbrueffer * "dir*" has a bunch of attributes. 117159622Sbrueffer */ 118176228Sbrueffer dirname[0] = '\0'; 119176228Sbrueffer strcpy(dir, "/dir0"); 120176228Sbrueffer for (i = 0; i < 10; i++) { 121176228Sbrueffer dir[4] = '0' + i; 122176228Sbrueffer if (i == 0) 123176228Sbrueffer strcat(dirname, dir+1); 124176228Sbrueffer else 125176228Sbrueffer strcat(dirname, dir); 126176228Sbrueffer assert((ae = archive_entry_new()) != NULL); 127176228Sbrueffer archive_entry_set_atime(ae, 2, 20); 128195818Sgallatin archive_entry_set_birthtime(ae, 3, 30); 129176228Sbrueffer archive_entry_set_ctime(ae, 4, 40); 130176228Sbrueffer archive_entry_set_mtime(ae, 5, 50); 131176228Sbrueffer archive_entry_copy_pathname(ae, dirname); 132176228Sbrueffer archive_entry_set_mode(ae, S_IFDIR | 0755); 133176228Sbrueffer assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 134176228Sbrueffer archive_entry_free(ae); 135195818Sgallatin } 136176228Sbrueffer 137176228Sbrueffer /* 138176228Sbrueffer * "dir0/dir1/file1" has 8 bytes of data. 139176228Sbrueffer */ 140176228Sbrueffer assert((ae = archive_entry_new()) != NULL); 141176228Sbrueffer archive_entry_set_atime(ae, 2, 20); 142176228Sbrueffer archive_entry_set_birthtime(ae, 3, 30); 143176228Sbrueffer archive_entry_set_ctime(ae, 4, 40); 144176228Sbrueffer archive_entry_set_mtime(ae, 5, 50); 145176228Sbrueffer archive_entry_copy_pathname(ae, "dir0/dir1/file1"); 146176228Sbrueffer archive_entry_set_mode(ae, AE_IFREG | 0755); 147176228Sbrueffer archive_entry_set_size(ae, 8); 148176228Sbrueffer archive_entry_set_nlink(ae, 1); 149155852Sgallatin assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 150176228Sbrueffer archive_entry_free(ae); 151155852Sgallatin assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9)); 152155852Sgallatin 153159571Sgallatin /* 154155852Sgallatin * "dir0/dir1/file2" has 8 bytes of data. 155159571Sgallatin */ 156155852Sgallatin assert((ae = archive_entry_new()) != NULL); 157159571Sgallatin archive_entry_set_atime(ae, 2, 20); 158159622Sbrueffer archive_entry_set_birthtime(ae, 3, 30); 159176228Sbrueffer archive_entry_set_ctime(ae, 4, 40); 160176228Sbrueffer archive_entry_set_mtime(ae, 5, 50); 161155852Sgallatin archive_entry_copy_pathname(ae, "dir0/dir1/file2"); 162155852Sgallatin archive_entry_set_mode(ae, AE_IFREG | 0755); 163155852Sgallatin archive_entry_set_size(ae, 8); 164155852Sgallatin archive_entry_set_nlink(ae, 1); 165162871Sru assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 166155852Sgallatin archive_entry_free(ae); 167155852Sgallatin assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9)); 168155852Sgallatin 169155852Sgallatin /* 170155852Sgallatin * Add a wrong path "dir0/dir1/file2/wrong" 171155852Sgallatin */ 172166344Sbrueffer assert((ae = archive_entry_new()) != NULL); 173155852Sgallatin archive_entry_set_atime(ae, 2, 20); 174155852Sgallatin archive_entry_set_birthtime(ae, 3, 30); 175155852Sgallatin archive_entry_set_ctime(ae, 4, 40); 176155852Sgallatin archive_entry_set_mtime(ae, 5, 50); 177155852Sgallatin archive_entry_copy_pathname(ae, "dir0/dir1/file2/wrong"); 178155852Sgallatin archive_entry_set_mode(ae, AE_IFREG | 0755); 179155852Sgallatin archive_entry_set_size(ae, 8); 180155852Sgallatin archive_entry_set_nlink(ae, 1); 181175084Sgabor assertEqualIntA(a, ARCHIVE_FAILED, archive_write_header(a, ae)); 182155852Sgallatin archive_entry_free(ae); 183155852Sgallatin 184155852Sgallatin /* Close out the archive. */ 185155852Sgallatin assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a)); 186159622Sbrueffer assertEqualIntA(a, ARCHIVE_OK, archive_write_free(a)); 187 188 /* 189 * ----------------------------------------------------------- 190 * Now, read the data back(read Rockridge extensions). 191 * ----------------------------------------------------------- 192 */ 193 assert((a = archive_read_new()) != NULL); 194 assertEqualIntA(a, 0, archive_read_support_format_all(a)); 195 assertEqualIntA(a, 0, archive_read_support_filter_all(a)); 196 assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used)); 197 198 /* 199 * Read Root Directory 200 */ 201 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 202 assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae)); 203 assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae)); 204 assertEqualString(".", archive_entry_pathname(ae)); 205 assert((S_IFDIR | 0555) == archive_entry_mode(ae)); 206 assertEqualInt(2048, archive_entry_size(ae)); 207 208 /* 209 * Read "dir0" 210 */ 211 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 212 assertEqualInt(2, archive_entry_atime(ae)); 213 assertEqualInt(3, archive_entry_birthtime(ae)); 214 assertEqualInt(4, archive_entry_ctime(ae)); 215 assertEqualInt(5, archive_entry_mtime(ae)); 216 assertEqualString("dir0", 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/dir1" 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/dir1", 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/dir2" 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/dir2", 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/dir3" 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/dir3", 253 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/dir4" 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/dir4", 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/dir5" 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/dir5", 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/dir6" 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/dir6", 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/dir7" 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/dir7", 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/dir8" 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/dir8", 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/dir9" 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/dir9", 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 "hardlnk" 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("hardlnk", archive_entry_pathname(ae)); 344 assert((AE_IFREG | 0555) == archive_entry_mode(ae)); 345 assertEqualInt(2, archive_entry_nlink(ae)); 346 assertEqualInt(8, archive_entry_size(ae)); 347 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 348 assertEqualMem(buff2, "12345678", 8); 349 350 /* 351 * Read "file" 352 */ 353 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 354 assertEqualInt(2, archive_entry_atime(ae)); 355 assertEqualInt(3, archive_entry_birthtime(ae)); 356 assertEqualInt(4, archive_entry_ctime(ae)); 357 assertEqualInt(5, archive_entry_mtime(ae)); 358 assertEqualString("file", archive_entry_pathname(ae)); 359 assertEqualString("hardlnk", archive_entry_hardlink(ae)); 360 assert((AE_IFREG | 0555) == archive_entry_mode(ae)); 361 assertEqualInt(2, archive_entry_nlink(ae)); 362 assertEqualInt(0, archive_entry_size(ae)); 363 364 /* 365 * Read longname 366 */ 367 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 368 assert(archive_entry_atime_is_set(ae)); 369 assertEqualInt(2, archive_entry_atime(ae)); 370 /* Birthtime > mtime above, so it doesn't get stored at all. */ 371 assert(!archive_entry_birthtime_is_set(ae)); 372 assertEqualInt(0, archive_entry_birthtime(ae)); 373 assert(archive_entry_ctime_is_set(ae)); 374 assertEqualInt(4, archive_entry_ctime(ae)); 375 assert(archive_entry_mtime_is_set(ae)); 376 assertEqualInt(5, archive_entry_mtime(ae)); 377 assertEqualString(longname, archive_entry_pathname(ae)); 378#if !defined(_WIN32) && !defined(__CYGWIN__) 379 assert((AE_IFREG | 0444) == archive_entry_mode(ae)); 380#else 381 /* On Windows and CYGWIN, always set all exec bit ON by default. */ 382 assert((AE_IFREG | 0555) == archive_entry_mode(ae)); 383#endif 384 assertEqualInt(8, archive_entry_size(ae)); 385 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 386 assertEqualMem(buff2, "12345678", 8); 387 388 /* 389 * Read "dir0/dir1/file1" 390 */ 391 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 392 assertEqualInt(2, archive_entry_atime(ae)); 393 assertEqualInt(3, archive_entry_birthtime(ae)); 394 assertEqualInt(4, archive_entry_ctime(ae)); 395 assertEqualInt(5, archive_entry_mtime(ae)); 396 assertEqualString("dir0/dir1/file1", archive_entry_pathname(ae)); 397 assert((AE_IFREG | 0555) == archive_entry_mode(ae)); 398 assertEqualInt(1, archive_entry_nlink(ae)); 399 assertEqualInt(8, archive_entry_size(ae)); 400 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 401 assertEqualMem(buff2, "12345678", 8); 402 403 /* 404 * Read "dir0/dir1/file2" 405 */ 406 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 407 assertEqualInt(2, archive_entry_atime(ae)); 408 assertEqualInt(3, archive_entry_birthtime(ae)); 409 assertEqualInt(4, archive_entry_ctime(ae)); 410 assertEqualInt(5, archive_entry_mtime(ae)); 411 assertEqualString("dir0/dir1/file2", archive_entry_pathname(ae)); 412 assert((AE_IFREG | 0555) == archive_entry_mode(ae)); 413 assertEqualInt(1, archive_entry_nlink(ae)); 414 assertEqualInt(8, archive_entry_size(ae)); 415 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 416 assertEqualMem(buff2, "12345678", 8); 417 418 /* 419 * Read "symlnk" 420 */ 421 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 422 assert(archive_entry_atime_is_set(ae)); 423 assertEqualInt(2, archive_entry_atime(ae)); 424 assert(!archive_entry_birthtime_is_set(ae)); 425 assertEqualInt(0, archive_entry_birthtime(ae)); 426 assert(archive_entry_ctime_is_set(ae)); 427 assertEqualInt(4, archive_entry_ctime(ae)); 428 assert(archive_entry_mtime_is_set(ae)); 429 assertEqualInt(5, archive_entry_mtime(ae)); 430 assertEqualString("symlnk", archive_entry_pathname(ae)); 431 assert((AE_IFLNK | 0555) == archive_entry_mode(ae)); 432 assertEqualString(longname, archive_entry_symlink(ae)); 433 434 /* 435 * Verify the end of the archive. 436 */ 437 assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 438 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); 439 assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a)); 440 441 /* 442 * ----------------------------------------------------------- 443 * Now, read the data back without Rockridge option 444 * (read Joliet extensions). 445 * ----------------------------------------------------------- 446 */ 447 assert((a = archive_read_new()) != NULL); 448 assertEqualIntA(a, 0, archive_read_support_format_all(a)); 449 assertEqualIntA(a, 0, archive_read_support_filter_all(a)); 450 /* Disable Rockridge extensions support. */ 451 assertEqualInt(ARCHIVE_OK, 452 archive_read_set_option(a, NULL, "rockridge", NULL)); 453 assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used)); 454 455 /* 456 * Read Root Directory 457 */ 458 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 459 assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae)); 460 assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae)); 461 assertEqualString(".", archive_entry_pathname(ae)); 462 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 463 assertEqualInt(2048, archive_entry_size(ae)); 464 465 /* 466 * Read "dir0" 467 */ 468 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 469 assertEqualInt(5, archive_entry_atime(ae)); 470 assertEqualInt(5, archive_entry_ctime(ae)); 471 assertEqualInt(5, archive_entry_mtime(ae)); 472 assertEqualString("dir0", archive_entry_pathname(ae)); 473 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 474 assertEqualInt(2048, archive_entry_size(ae)); 475 476 /* 477 * Read "dir0/dir1" 478 */ 479 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 480 assertEqualInt(5, archive_entry_atime(ae)); 481 assertEqualInt(5, archive_entry_ctime(ae)); 482 assertEqualInt(5, archive_entry_mtime(ae)); 483 assertEqualString("dir0/dir1", archive_entry_pathname(ae)); 484 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 485 assertEqualInt(2048, archive_entry_size(ae)); 486 487 /* 488 * Read "dir0/dir1/dir2" 489 */ 490 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 491 assertEqualInt(5, archive_entry_atime(ae)); 492 assertEqualInt(5, archive_entry_ctime(ae)); 493 assertEqualInt(5, archive_entry_mtime(ae)); 494 assertEqualString("dir0/dir1/dir2", archive_entry_pathname(ae)); 495 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 496 assertEqualInt(2048, archive_entry_size(ae)); 497 498 /* 499 * Read "dir0/dir1/dir2/dir3" 500 */ 501 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 502 assertEqualInt(5, archive_entry_atime(ae)); 503 assertEqualInt(5, archive_entry_ctime(ae)); 504 assertEqualInt(5, archive_entry_mtime(ae)); 505 assertEqualString("dir0/dir1/dir2/dir3", 506 archive_entry_pathname(ae)); 507 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 508 assertEqualInt(2048, archive_entry_size(ae)); 509 510 /* 511 * Read "dir0/dir1/dir2/dir3/dir4" 512 */ 513 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 514 assertEqualInt(5, archive_entry_atime(ae)); 515 assertEqualInt(5, archive_entry_ctime(ae)); 516 assertEqualInt(5, archive_entry_mtime(ae)); 517 assertEqualString("dir0/dir1/dir2/dir3/dir4", 518 archive_entry_pathname(ae)); 519 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 520 assertEqualInt(2048, archive_entry_size(ae)); 521 522 /* 523 * Read "dir0/dir1/dir2/dir3/dir4/dir5" 524 */ 525 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 526 assertEqualInt(5, archive_entry_atime(ae)); 527 assertEqualInt(5, archive_entry_ctime(ae)); 528 assertEqualInt(5, archive_entry_mtime(ae)); 529 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5", 530 archive_entry_pathname(ae)); 531 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 532 assertEqualInt(2048, archive_entry_size(ae)); 533 534 /* 535 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6" 536 */ 537 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 538 assertEqualInt(5, archive_entry_atime(ae)); 539 assertEqualInt(5, archive_entry_ctime(ae)); 540 assertEqualInt(5, archive_entry_mtime(ae)); 541 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6", 542 archive_entry_pathname(ae)); 543 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 544 assertEqualInt(2048, archive_entry_size(ae)); 545 546 /* 547 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7" 548 */ 549 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 550 assertEqualInt(5, archive_entry_atime(ae)); 551 assertEqualInt(5, archive_entry_ctime(ae)); 552 assertEqualInt(5, archive_entry_mtime(ae)); 553 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7", 554 archive_entry_pathname(ae)); 555 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 556 assertEqualInt(2048, archive_entry_size(ae)); 557 558 /* 559 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8" 560 */ 561 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 562 assertEqualInt(5, archive_entry_atime(ae)); 563 assertEqualInt(5, archive_entry_ctime(ae)); 564 assertEqualInt(5, archive_entry_mtime(ae)); 565 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8", 566 archive_entry_pathname(ae)); 567 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 568 assertEqualInt(2048, archive_entry_size(ae)); 569 570 /* 571 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9" 572 */ 573 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 574 assertEqualInt(5, archive_entry_atime(ae)); 575 assertEqualInt(5, archive_entry_ctime(ae)); 576 assertEqualInt(5, archive_entry_mtime(ae)); 577 assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9", 578 archive_entry_pathname(ae)); 579 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 580 assertEqualInt(2048, archive_entry_size(ae)); 581 582 /* 583 * Read "hardlnk" 584 */ 585 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 586 assertEqualInt(5, archive_entry_atime(ae)); 587 assertEqualInt(5, archive_entry_ctime(ae)); 588 assertEqualInt(5, archive_entry_mtime(ae)); 589 assertEqualString("hardlnk", archive_entry_pathname(ae)); 590 assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 591 assertEqualInt(2, archive_entry_nlink(ae)); 592 assertEqualInt(8, archive_entry_size(ae)); 593 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 594 assertEqualMem(buff2, "12345678", 8); 595 596 /* 597 * Read "file" 598 */ 599 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 600 assertEqualInt(5, archive_entry_atime(ae)); 601 assertEqualInt(5, archive_entry_ctime(ae)); 602 assertEqualInt(5, archive_entry_mtime(ae)); 603 assertEqualString("file", archive_entry_pathname(ae)); 604 assertEqualString("hardlnk", archive_entry_hardlink(ae)); 605 assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 606 assertEqualInt(0, archive_entry_size(ae)); 607 assertEqualIntA(a, 0, archive_read_data(a, buff2, 10)); 608 609 /* 610 * Read longname 611 */ 612 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 613 assert(archive_entry_atime_is_set(ae)); 614 assertEqualInt(5, archive_entry_atime(ae)); 615 assert(archive_entry_ctime_is_set(ae)); 616 assertEqualInt(5, archive_entry_ctime(ae)); 617 assert(archive_entry_mtime_is_set(ae)); 618 assertEqualInt(5, archive_entry_mtime(ae)); 619 /* Trim lngname to 64 characters. */ 620 longname[64] = '\0'; 621 assertEqualString(longname, archive_entry_pathname(ae)); 622 assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 623 assertEqualInt(8, archive_entry_size(ae)); 624 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 625 assertEqualMem(buff2, "12345678", 8); 626 627 /* 628 * Read "dir0/dir1/file1" 629 */ 630 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 631 assertEqualInt(5, archive_entry_atime(ae)); 632 assertEqualInt(5, archive_entry_ctime(ae)); 633 assertEqualInt(5, archive_entry_mtime(ae)); 634 assertEqualString("dir0/dir1/file1", archive_entry_pathname(ae)); 635 assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 636 assertEqualInt(1, archive_entry_nlink(ae)); 637 assertEqualInt(8, archive_entry_size(ae)); 638 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 639 assertEqualMem(buff2, "12345678", 8); 640 641 /* 642 * Read "dir0/dir1/file2" 643 */ 644 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 645 assertEqualInt(5, archive_entry_atime(ae)); 646 assertEqualInt(5, archive_entry_ctime(ae)); 647 assertEqualInt(5, archive_entry_mtime(ae)); 648 assertEqualString("dir0/dir1/file2", archive_entry_pathname(ae)); 649 assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 650 assertEqualInt(1, archive_entry_nlink(ae)); 651 assertEqualInt(8, archive_entry_size(ae)); 652 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 653 assertEqualMem(buff2, "12345678", 8); 654 655 /* 656 * Read "symlnk" 657 */ 658 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 659 assert(archive_entry_atime_is_set(ae)); 660 assertEqualInt(5, archive_entry_atime(ae)); 661 assert(!archive_entry_birthtime_is_set(ae)); 662 assertEqualInt(0, archive_entry_birthtime(ae)); 663 assert(archive_entry_ctime_is_set(ae)); 664 assertEqualInt(5, archive_entry_ctime(ae)); 665 assert(archive_entry_mtime_is_set(ae)); 666 assertEqualInt(5, archive_entry_mtime(ae)); 667 assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 668 assertEqualInt(0, archive_entry_size(ae)); 669 670 /* 671 * Verify the end of the archive. 672 */ 673 assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 674 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); 675 assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a)); 676 677 /* 678 * ----------------------------------------------------------- 679 * Now, read the data back without Rockridge and Joliet option 680 * (read ISO9660). 681 * This mode appears rr_moved directory. 682 * ----------------------------------------------------------- 683 */ 684 assert((a = archive_read_new()) != NULL); 685 assertEqualIntA(a, 0, archive_read_support_format_all(a)); 686 assertEqualIntA(a, 0, archive_read_support_filter_all(a)); 687 /* Disable Rockridge and Joliet extensions support. */ 688 assertEqualInt(ARCHIVE_OK, 689 archive_read_set_option(a, NULL, "rockridge", NULL)); 690 assertEqualInt(ARCHIVE_OK, 691 archive_read_set_option(a, NULL, "joliet", NULL)); 692 assertEqualIntA(a, 0, archive_read_open_memory(a, buff, used)); 693 694 /* 695 * Read Root Directory 696 */ 697 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 698 assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae)); 699 assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae)); 700 assertEqualString(".", archive_entry_pathname(ae)); 701 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 702 assertEqualInt(2048, archive_entry_size(ae)); 703 704 /* 705 * Read "rr_moved" 706 */ 707 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 708 assertEqualInt(archive_entry_atime(ae), archive_entry_ctime(ae)); 709 assertEqualInt(archive_entry_atime(ae), archive_entry_mtime(ae)); 710 assertEqualString("RR_MOVED", archive_entry_pathname(ae)); 711 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 712 assertEqualInt(2048, archive_entry_size(ae)); 713 714 /* 715 * Read "rr_moved/dir7" 716 */ 717 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 718 assertEqualInt(5, archive_entry_atime(ae)); 719 assertEqualInt(5, archive_entry_ctime(ae)); 720 assertEqualInt(5, archive_entry_mtime(ae)); 721 assertEqualString("RR_MOVED/DIR7", archive_entry_pathname(ae)); 722 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 723 assertEqualInt(2048, archive_entry_size(ae)); 724 725 /* 726 * Read "rr_moved/dir7/dir8" 727 */ 728 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 729 assertEqualInt(5, archive_entry_atime(ae)); 730 assertEqualInt(5, archive_entry_ctime(ae)); 731 assertEqualInt(5, archive_entry_mtime(ae)); 732 assertEqualString("RR_MOVED/DIR7/DIR8", archive_entry_pathname(ae)); 733 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 734 assertEqualInt(2048, archive_entry_size(ae)); 735 736 /* 737 * Read "rr_moved/dir7/dir8/dir9" 738 */ 739 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 740 assertEqualInt(5, archive_entry_atime(ae)); 741 assertEqualInt(5, archive_entry_ctime(ae)); 742 assertEqualInt(5, archive_entry_mtime(ae)); 743 assertEqualString("RR_MOVED/DIR7/DIR8/DIR9", 744 archive_entry_pathname(ae)); 745 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 746 assertEqualInt(2048, archive_entry_size(ae)); 747 748 /* 749 * Read "dir0" 750 */ 751 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 752 assertEqualInt(5, archive_entry_atime(ae)); 753 assertEqualInt(5, archive_entry_ctime(ae)); 754 assertEqualInt(5, archive_entry_mtime(ae)); 755 assertEqualString("DIR0", archive_entry_pathname(ae)); 756 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 757 assertEqualInt(2048, archive_entry_size(ae)); 758 759 /* 760 * Read "dir0/dir1" 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", archive_entry_pathname(ae)); 767 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 768 assertEqualInt(2048, archive_entry_size(ae)); 769 770 /* 771 * Read "dir0/dir1/dir2" 772 */ 773 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 774 assertEqualInt(5, archive_entry_atime(ae)); 775 assertEqualInt(5, archive_entry_ctime(ae)); 776 assertEqualInt(5, archive_entry_mtime(ae)); 777 assertEqualString("DIR0/DIR1/DIR2", archive_entry_pathname(ae)); 778 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 779 assertEqualInt(2048, archive_entry_size(ae)); 780 781 /* 782 * Read "dir0/dir1/dir2/dir3" 783 */ 784 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 785 assertEqualInt(5, archive_entry_atime(ae)); 786 assertEqualInt(5, archive_entry_ctime(ae)); 787 assertEqualInt(5, archive_entry_mtime(ae)); 788 assertEqualString("DIR0/DIR1/DIR2/DIR3", 789 archive_entry_pathname(ae)); 790 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 791 assertEqualInt(2048, archive_entry_size(ae)); 792 793 /* 794 * Read "dir0/dir1/dir2/dir3/dir4" 795 */ 796 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 797 assertEqualInt(5, archive_entry_atime(ae)); 798 assertEqualInt(5, archive_entry_ctime(ae)); 799 assertEqualInt(5, archive_entry_mtime(ae)); 800 assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4", 801 archive_entry_pathname(ae)); 802 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 803 assertEqualInt(2048, archive_entry_size(ae)); 804 805 /* 806 * Read "dir0/dir1/dir2/dir3/dir4/dir5" 807 */ 808 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 809 assertEqualInt(5, archive_entry_atime(ae)); 810 assertEqualInt(5, archive_entry_ctime(ae)); 811 assertEqualInt(5, archive_entry_mtime(ae)); 812 assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5", 813 archive_entry_pathname(ae)); 814 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 815 assertEqualInt(2048, archive_entry_size(ae)); 816 817 /* 818 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6" 819 */ 820 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 821 assertEqualInt(5, archive_entry_atime(ae)); 822 assertEqualInt(5, archive_entry_ctime(ae)); 823 assertEqualInt(5, archive_entry_mtime(ae)); 824 assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5/DIR6", 825 archive_entry_pathname(ae)); 826 assert((S_IFDIR | 0700) == archive_entry_mode(ae)); 827 assertEqualInt(2048, archive_entry_size(ae)); 828 829 /* 830 * Read "file" 831 */ 832 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 833 assertEqualInt(5, archive_entry_atime(ae)); 834 assertEqualInt(0, archive_entry_birthtime(ae)); 835 assertEqualInt(5, archive_entry_ctime(ae)); 836 assertEqualInt(5, archive_entry_mtime(ae)); 837 assertEqualString("FILE", archive_entry_pathname(ae)); 838 assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 839 assertEqualInt(2, archive_entry_nlink(ae)); 840 assertEqualInt(8, archive_entry_size(ae)); 841 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 842 assertEqualMem(buff2, "12345678", 8); 843 844 /* 845 * Read "hardlink" 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("HARDLNK", archive_entry_pathname(ae)); 852 assertEqualString("FILE", archive_entry_hardlink(ae)); 853 assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 854 assertEqualInt(0, archive_entry_size(ae)); 855 assertEqualIntA(a, 0, archive_read_data(a, buff2, 10)); 856 857 /* 858 * Read longname 859 */ 860 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 861 assert(archive_entry_atime_is_set(ae)); 862 assertEqualInt(5, archive_entry_atime(ae)); 863 assert(archive_entry_ctime_is_set(ae)); 864 assertEqualInt(5, archive_entry_ctime(ae)); 865 assert(archive_entry_mtime_is_set(ae)); 866 assertEqualInt(5, archive_entry_mtime(ae)); 867 assertEqualString("LONGNAME", archive_entry_pathname(ae)); 868 assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 869 assertEqualInt(8, archive_entry_size(ae)); 870 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 871 assertEqualMem(buff2, "12345678", 8); 872 873 /* 874 * Read "dir0/dir1/file1" 875 */ 876 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 877 assertEqualInt(5, archive_entry_atime(ae)); 878 assertEqualInt(5, archive_entry_ctime(ae)); 879 assertEqualInt(5, archive_entry_mtime(ae)); 880 assertEqualString("DIR0/DIR1/FILE1", archive_entry_pathname(ae)); 881 assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 882 assertEqualInt(1, archive_entry_nlink(ae)); 883 assertEqualInt(8, archive_entry_size(ae)); 884 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 885 assertEqualMem(buff2, "12345678", 8); 886 887 /* 888 * Read "dir0/dir1/file2" 889 */ 890 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 891 assertEqualInt(5, archive_entry_atime(ae)); 892 assertEqualInt(5, archive_entry_ctime(ae)); 893 assertEqualInt(5, archive_entry_mtime(ae)); 894 assertEqualString("DIR0/DIR1/FILE2", archive_entry_pathname(ae)); 895 assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 896 assertEqualInt(1, archive_entry_nlink(ae)); 897 assertEqualInt(8, archive_entry_size(ae)); 898 assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); 899 assertEqualMem(buff2, "12345678", 8); 900 901 /* 902 * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7" as file 903 */ 904 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 905 assertEqualInt(5, archive_entry_atime(ae)); 906 assertEqualInt(5, archive_entry_ctime(ae)); 907 assertEqualInt(5, archive_entry_mtime(ae)); 908 assertEqualString("DIR0/DIR1/DIR2/DIR3/DIR4/DIR5/DIR6/DIR7", 909 archive_entry_pathname(ae)); 910 assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 911 assertEqualInt(0, archive_entry_size(ae)); 912 913 /* 914 * Read "symlnk" 915 */ 916 assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); 917 assert(archive_entry_atime_is_set(ae)); 918 assertEqualInt(5, archive_entry_atime(ae)); 919 assert(!archive_entry_birthtime_is_set(ae)); 920 assertEqualInt(0, archive_entry_birthtime(ae)); 921 assert(archive_entry_ctime_is_set(ae)); 922 assertEqualInt(5, archive_entry_ctime(ae)); 923 assert(archive_entry_mtime_is_set(ae)); 924 assertEqualInt(5, archive_entry_mtime(ae)); 925 assertEqualString("SYMLNK", archive_entry_pathname(ae)); 926 assert((AE_IFREG | 0400) == archive_entry_mode(ae)); 927 assertEqualInt(0, archive_entry_size(ae)); 928 929 /* 930 * Verify the end of the archive. 931 */ 932 assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 933 assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); 934 assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a)); 935 936 free(buff); 937} 938