1285970Sbdrewery/*- 2285970Sbdrewery * Copyright (c) 2014 Michihiro NAKAJIMA 3285970Sbdrewery * All rights reserved. 4285970Sbdrewery * 5285970Sbdrewery * Redistribution and use in source and binary forms, with or without 6285970Sbdrewery * modification, are permitted provided that the following conditions 7285970Sbdrewery * are met: 8285970Sbdrewery * 1. Redistributions of source code must retain the above copyright 9285970Sbdrewery * notice, this list of conditions and the following disclaimer. 10285970Sbdrewery * 2. Redistributions in binary form must reproduce the above copyright 11285970Sbdrewery * notice, this list of conditions and the following disclaimer in the 12285970Sbdrewery * documentation and/or other materials provided with the distribution. 13285970Sbdrewery * 14285970Sbdrewery * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 15285970Sbdrewery * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16285970Sbdrewery * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17285970Sbdrewery * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 18285970Sbdrewery * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19285970Sbdrewery * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20285970Sbdrewery * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21285970Sbdrewery * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22285970Sbdrewery * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23285970Sbdrewery * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24285970Sbdrewery */ 25285970Sbdrewery#include "test.h" 26285970Sbdrewery__FBSDID("$FreeBSD"); 27285970Sbdrewery 28299529Smm#if defined(__BORLANDC__) || (defined(_MSC_VER) && _MSC_VER <= 1300) 29299529Smm# define LITERAL_LL(x) x##i64 30299529Smm#else 31299529Smm# define LITERAL_LL(x) x##ll 32299529Smm#endif 33285970Sbdrewery/* 34285970Sbdrewery * To test skip a sparse file entry, this test does not read file data. 35285970Sbdrewery */ 36285970SbdreweryDEFINE_TEST(test_read_format_gtar_sparse_skip_entry) 37285970Sbdrewery{ 38285972Sbdrewery#ifndef __FreeBSD__ /* Backport test. */ 39285970Sbdrewery const char *refname = "test_read_format_gtar_sparse_skip_entry.tar.Z.uu"; 40285972Sbdrewery#else 41285972Sbdrewery const char *refname = "test_read_format_gtar_sparse_skip_entry.tar.Z"; 42285972Sbdrewery#endif 43285970Sbdrewery struct archive *a; 44285970Sbdrewery struct archive_entry *ae; 45285970Sbdrewery const void *p; 46285970Sbdrewery size_t s; 47285970Sbdrewery int64_t o; 48285970Sbdrewery 49285972Sbdrewery#ifndef __FreeBSD__ /* Backport test. */ 50285970Sbdrewery copy_reference_file(refname); 51285972Sbdrewery#else 52285972Sbdrewery extract_reference_file(refname); 53285972Sbdrewery#endif 54285970Sbdrewery assert((a = archive_read_new()) != NULL); 55285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 56285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 57285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, 58285970Sbdrewery archive_read_open_filename(a, refname, 10240)); 59285970Sbdrewery 60285970Sbdrewery /* Verify regular first file. */ 61285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 62285970Sbdrewery assertEqualString("a", archive_entry_pathname(ae)); 63299529Smm assertEqualInt(LITERAL_LL(10737418244), archive_entry_size(ae)); 64285972Sbdrewery#ifndef __FreeBSD__ /* Backport test. */ 65285970Sbdrewery assertEqualInt(archive_entry_is_encrypted(ae), 0); 66285970Sbdrewery assertEqualIntA(a, archive_read_has_encrypted_entries(a), 67285970Sbdrewery ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); 68285972Sbdrewery#endif 69285970Sbdrewery 70285970Sbdrewery /* Verify regular second file. */ 71285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 72285970Sbdrewery assertEqualString("b", archive_entry_pathname(ae)); 73285970Sbdrewery assertEqualInt(4, archive_entry_size(ae)); 74285972Sbdrewery#ifndef __FreeBSD__ /* Backport test. */ 75285970Sbdrewery assertEqualInt(archive_entry_is_encrypted(ae), 0); 76285970Sbdrewery assertEqualIntA(a, archive_read_has_encrypted_entries(a), 77285970Sbdrewery ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); 78285972Sbdrewery#endif 79285970Sbdrewery 80285970Sbdrewery 81285970Sbdrewery /* End of archive. */ 82285970Sbdrewery assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 83285970Sbdrewery 84285970Sbdrewery /* Verify archive format. */ 85285970Sbdrewery assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0)); 86285970Sbdrewery assertEqualIntA(a, ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE, 87285970Sbdrewery archive_format(a)); 88285970Sbdrewery 89285970Sbdrewery /* Close the archive. */ 90285970Sbdrewery assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 91285970Sbdrewery assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 92285970Sbdrewery 93285970Sbdrewery 94285970Sbdrewery /* 95285970Sbdrewery * Read just one block of a sparse file and skip it. 96285970Sbdrewery */ 97285970Sbdrewery assert((a = archive_read_new()) != NULL); 98285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 99285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 100285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, 101285970Sbdrewery archive_read_open_filename(a, refname, 10240)); 102285970Sbdrewery 103285970Sbdrewery /* Verify regular first file. */ 104285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 105285970Sbdrewery assertEqualString("a", archive_entry_pathname(ae)); 106299529Smm assertEqualInt(LITERAL_LL(10737418244), archive_entry_size(ae)); 107285972Sbdrewery#ifndef __FreeBSD__ /* Backport test. */ 108285970Sbdrewery assertEqualInt(archive_entry_is_encrypted(ae), 0); 109285970Sbdrewery assertEqualIntA(a, archive_read_has_encrypted_entries(a), 110285970Sbdrewery ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); 111285972Sbdrewery#endif 112285970Sbdrewery assertEqualInt(0, archive_read_data_block(a, &p, &s, &o)); 113285970Sbdrewery assertEqualInt(4096, s); 114285970Sbdrewery assertEqualInt(0, o); 115285970Sbdrewery 116285970Sbdrewery 117285970Sbdrewery /* Verify regular second file. */ 118285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 119285970Sbdrewery assertEqualString("b", archive_entry_pathname(ae)); 120285970Sbdrewery assertEqualInt(4, archive_entry_size(ae)); 121285972Sbdrewery#ifndef __FreeBSD__ /* Backport test. */ 122285970Sbdrewery assertEqualInt(archive_entry_is_encrypted(ae), 0); 123285970Sbdrewery assertEqualIntA(a, archive_read_has_encrypted_entries(a), 124285970Sbdrewery ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); 125285972Sbdrewery#endif 126285970Sbdrewery 127285970Sbdrewery 128285970Sbdrewery /* End of archive. */ 129285970Sbdrewery assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 130285970Sbdrewery 131285970Sbdrewery /* Verify archive format. */ 132285970Sbdrewery assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0)); 133285970Sbdrewery assertEqualIntA(a, ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE, 134285970Sbdrewery archive_format(a)); 135285970Sbdrewery 136285970Sbdrewery /* Close the archive. */ 137285970Sbdrewery assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 138285970Sbdrewery assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 139285970Sbdrewery} 140285970Sbdrewery 141