diff options
Diffstat (limited to 'lib/libarchive/test')
-rw-r--r-- | lib/libarchive/test/main.c | 12 | ||||
-rw-r--r-- | lib/libarchive/test/test.h | 13 | ||||
-rw-r--r-- | lib/libarchive/test/test_read_disk.c | 6 | ||||
-rw-r--r-- | lib/libarchive/test/test_read_extract.c | 6 | ||||
-rw-r--r-- | lib/libarchive/test/test_tar_large.c | 35 | ||||
-rw-r--r-- | lib/libarchive/test/test_write_disk.c | 18 | ||||
-rw-r--r-- | lib/libarchive/test/test_write_disk_failures.c | 2 | ||||
-rw-r--r-- | lib/libarchive/test/test_write_disk_hardlink.c | 21 | ||||
-rw-r--r-- | lib/libarchive/test/test_write_disk_perms.c | 4 | ||||
-rw-r--r-- | lib/libarchive/test/test_write_disk_secure.c | 4 |
10 files changed, 68 insertions, 53 deletions
diff --git a/lib/libarchive/test/main.c b/lib/libarchive/test/main.c index 62a0a3f0f9ce..01a081705ef1 100644 --- a/lib/libarchive/test/main.c +++ b/lib/libarchive/test/main.c @@ -33,7 +33,7 @@ #include <locale.h> #include <stdarg.h> #include <time.h> -#ifdef _WIN32 +#if defined(_WIN32) && !defined(__CYGWIN__) #include <crtdbg.h> #include <windows.h> #include <winbase.h> @@ -93,7 +93,7 @@ static int assertions = 0; static const char *refdir; -#ifdef _WIN32 +#if defined(_WIN32) && !defined(__CYGWIN__) static void invalid_parameter_handler(const wchar_t * expression, @@ -798,7 +798,7 @@ static int test_run(int i, const char *tmpdir) /* If there were no failures, we can remove the work dir. */ if (failures == failures_before) { if (!keep_temp_files && chdir(tmpdir) == 0) { -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__CYGWIN__) systemf("rm -rf %s", tests[i].name); #else systemf("rmdir /S /Q %s", tests[i].name); @@ -894,7 +894,7 @@ extract_reference_file(const char *name) fclose(in); } -#ifdef _WIN32 +#if defined(_WIN32) && !defined(__CYGWIN__) #define DEV_NULL "NUL" #else #define DEV_NULL "/dev/null" @@ -966,7 +966,7 @@ get_refdir(void) strncat(tried, "\n", sizeof(tried) - strlen(tried) - 1); } -#if defined(_WIN32) && defined(_DEBUG) +#if defined(_WIN32) && !defined(__CYGWIN__) && defined(_DEBUG) DebugBreak(); #endif printf("Unable to locate known reference file %s\n", KNOWNREF); @@ -992,7 +992,7 @@ int main(int argc, char **argv) (void)argc; /* UNUSED */ -#ifdef _WIN32 +#if defined(_WIN32) && !defined(__CYGWIN__) /* To stop to run the default invalid parameter handler. */ _set_invalid_parameter_handler(invalid_parameter_handler); /* for open() to a binary mode. */ diff --git a/lib/libarchive/test/test.h b/lib/libarchive/test/test.h index fcac91ad285e..539c8262cb5f 100644 --- a/lib/libarchive/test/test.h +++ b/lib/libarchive/test/test.h @@ -37,7 +37,7 @@ #elif defined(__FreeBSD__) /* Building as part of FreeBSD system requires a pre-built config.h. */ #include "config_freebsd.h" -#elif defined(_WIN32) +#elif defined(_WIN32) && !defined(__CYGWIN__) /* Win32 can't run the 'configure' script. */ #include "config_windows.h" #else @@ -45,7 +45,7 @@ #error Oops: No config.h and no pre-built configuration in test.h. #endif -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__CYGWIN__) #include <dirent.h> #else #include <direct.h> @@ -56,7 +56,7 @@ #include <stdlib.h> #include <string.h> #include <sys/stat.h> -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__CYGWIN__) #include <unistd.h> #endif #include <wchar.h> @@ -69,10 +69,15 @@ #ifdef __FreeBSD__ #include <sys/cdefs.h> /* For __FBSDID */ #else +/* Some non-FreeBSD platforms such as newlib-derived ones like + * cygwin, have __FBSDID, so this definition must be guarded. + */ +#ifndef __FBSDID #define __FBSDID(a) /* null */ #endif +#endif -#ifdef _WIN32 +#if defined(_WIN32) && !defined(__CYGWIN__) #define snprintf sprintf_s #define LOCALE_DE "deu" #else diff --git a/lib/libarchive/test/test_read_disk.c b/lib/libarchive/test/test_read_disk.c index e368398e4689..ce10440df54b 100644 --- a/lib/libarchive/test/test_read_disk.c +++ b/lib/libarchive/test/test_read_disk.c @@ -111,6 +111,11 @@ DEFINE_TEST(test_read_disk) if (archive_read_disk_set_standard_lookup(a) != ARCHIVE_OK) { skipping("standard uname/gname lookup"); } else { +#if defined(__CYGWIN__) + skipping("standard uname/gname lookup; typically no user with uid=0 on cygwin platform"); + i = 0; + p = zero_groups[0]; /* avoid unused warnings */ +#else /* XXX Someday, we may need to generalize this the * same way we generalized the group name check below. * That's needed only if we encounter a system where @@ -135,6 +140,7 @@ DEFINE_TEST(test_read_disk) failure("group 0 didn't have any of the expected names"); assertEqualString(p, zero_groups[0]); } +#endif } /* Deregister again and verify the default lookups again. */ diff --git a/lib/libarchive/test/test_read_extract.c b/lib/libarchive/test/test_read_extract.c index b58b364a8418..887ddfde6852 100644 --- a/lib/libarchive/test/test_read_extract.c +++ b/lib/libarchive/test/test_read_extract.c @@ -32,13 +32,13 @@ DEFINE_TEST(test_read_extract) { struct archive_entry *ae; struct archive *a; -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__CYGWIN__) struct stat st; #endif size_t used; int i; char *buff, *file_buff; -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__CYGWIN__) int fd; ssize_t bytes_read; #endif @@ -138,7 +138,7 @@ DEFINE_TEST(test_read_extract) assert(0 == archive_read_finish(a)); #endif -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__CYGWIN__) /* Test the entries on disk. */ /* This first entry was extracted with ARCHIVE_EXTRACT_PERM, * so the permissions should have been restored exactly, diff --git a/lib/libarchive/test/test_tar_large.c b/lib/libarchive/test/test_tar_large.c index f56dc6c0fe81..b2b8e5dbfdc7 100644 --- a/lib/libarchive/test/test_tar_large.c +++ b/lib/libarchive/test/test_tar_large.c @@ -53,7 +53,7 @@ struct memblock { struct memblock *next; size_t size; void *buff; - off_t filebytes; + int64_t filebytes; }; /* @@ -61,17 +61,17 @@ struct memblock { * some accounting overhead. */ struct memdata { - off_t filebytes; + int64_t filebytes; void *buff; struct memblock *first; struct memblock *last; }; /* The following size definitions simplify things below. */ -#define KB ((off_t)1024) -#define MB ((off_t)1024 * KB) -#define GB ((off_t)1024 * MB) -#define TB ((off_t)1024 * GB) +#define KB ((int64_t)1024) +#define MB ((int64_t)1024 * KB) +#define GB ((int64_t)1024 * MB) +#define TB ((int64_t)1024 * GB) #if ARCHIVE_VERSION_NUMBER < 2000000 static ssize_t memory_read_skip(struct archive *, void *, size_t request); @@ -100,7 +100,7 @@ memory_write(struct archive *a, void *_private, const void *buff, size_t size) if ((const char *)filedata <= (const char *)buff && (const char *)buff < (const char *)filedata + filedatasize) { /* We don't need to store a block of file data. */ - private->last->filebytes += (off_t)size; + private->last->filebytes += (int64_t)size; } else { /* Yes, we're assuming the very first write is metadata. */ /* It's header or metadata, copy and save it. */ @@ -140,7 +140,7 @@ memory_read(struct archive *a, void *_private, const void **buff) * We're returning file bytes, simulate it by * passing blocks from the template data. */ - if (private->filebytes > (off_t)filedatasize) + if (private->filebytes > (int64_t)filedatasize) size = (ssize_t)filedatasize; else size = (ssize_t)private->filebytes; @@ -202,7 +202,7 @@ memory_read_skip(struct archive *a, void *_private, off_t skip) DEFINE_TEST(test_tar_large) { /* The sizes of the entries we're going to generate. */ - static off_t tests[] = { + static int64_t tests[] = { /* Test for 32-bit signed overflow. */ 2 * GB - 1, 2 * GB, 2 * GB + 1, /* Test for 32-bit unsigned overflow. */ @@ -218,7 +218,8 @@ DEFINE_TEST(test_tar_large) struct memdata memdata; struct archive_entry *ae; struct archive *a; - off_t filesize, writesize; + int64_t filesize; + size_t writesize; filedatasize = (size_t)(1 * MB); filedata = malloc(filedatasize); @@ -243,11 +244,6 @@ DEFINE_TEST(test_tar_large) archive_entry_set_mode(ae, S_IFREG | 0755); filesize = tests[i]; - if (filesize < 0) { - archive_entry_free(ae); - skipping("32-bit off_t doesn't permit testing of very large files."); - return; - } archive_entry_set_size(ae, filesize); assertA(0 == archive_write_header(a, ae)); @@ -257,10 +253,11 @@ DEFINE_TEST(test_tar_large) * Write the actual data to the archive. */ while (filesize > 0) { - writesize = (off_t)filedatasize; - if (writesize > filesize) - writesize = filesize; - assertA(writesize == archive_write_data(a, filedata, writesize)); + writesize = filedatasize; + if ((int64_t)writesize > filesize) + writesize = (size_t)filesize; + assertA((int)writesize + == archive_write_data(a, filedata, writesize)); filesize -= writesize; } } diff --git a/lib/libarchive/test/test_write_disk.c b/lib/libarchive/test/test_write_disk.c index 72c94443cc43..c0b22e58a125 100644 --- a/lib/libarchive/test/test_write_disk.c +++ b/lib/libarchive/test/test_write_disk.c @@ -52,7 +52,7 @@ static void create(struct archive_entry *ae, const char *msg) * that automatically. */ if (archive_entry_filetype(ae) == AE_IFDIR) st.st_mode &= ~S_ISGID; -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__CYGWIN__) assertEqualInt(st.st_mode, archive_entry_mode(ae) & ~UMASK); #endif } @@ -99,7 +99,7 @@ static void create_reg_file(struct archive_entry *ae, const char *msg) assert(0 == stat(archive_entry_pathname(ae), &st)); failure("st.st_mode=%o archive_entry_mode(ae)=%o", st.st_mode, archive_entry_mode(ae)); -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__CYGWIN__) assertEqualInt(st.st_mode, (archive_entry_mode(ae) & ~UMASK)); #endif assertEqualInt(st.st_size, sizeof(data)); @@ -146,7 +146,7 @@ static void create_reg_file2(struct archive_entry *ae, const char *msg) assert(0 == stat(archive_entry_pathname(ae), &st)); failure("st.st_mode=%o archive_entry_mode(ae)=%o", st.st_mode, archive_entry_mode(ae)); -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__CYGWIN__) assertEqualInt(st.st_mode, (archive_entry_mode(ae) & ~UMASK)); #endif assertEqualInt(st.st_size, i); @@ -183,7 +183,7 @@ static void create_reg_file3(struct archive_entry *ae, const char *msg) assert(0 == stat(archive_entry_pathname(ae), &st)); failure("st.st_mode=%o archive_entry_mode(ae)=%o", st.st_mode, archive_entry_mode(ae)); -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__CYGWIN__) assertEqualInt(st.st_mode, (archive_entry_mode(ae) & ~UMASK)); #endif assertEqualInt(st.st_size, 5); @@ -212,14 +212,14 @@ static void create_reg_file4(struct archive_entry *ae, const char *msg) assert(0 == stat(archive_entry_pathname(ae), &st)); failure("st.st_mode=%o archive_entry_mode(ae)=%o", st.st_mode, archive_entry_mode(ae)); -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__CYGWIN__) assertEqualInt(st.st_mode, (archive_entry_mode(ae) & ~UMASK)); #endif failure(msg); assertEqualInt(st.st_size, sizeof(data)); } -#ifdef _WIN32 +#if defined(_WIN32) && !defined(__CYGWIN__) static void create_reg_file_win(struct archive_entry *ae, const char *msg) { static const char data[]="abcdefghijklmnopqrstuvwxyz"; @@ -257,7 +257,7 @@ static void create_reg_file_win(struct archive_entry *ae, const char *msg) st.st_mode, archive_entry_mode(ae)); assertEqualInt(st.st_size, sizeof(data)); } -#endif /* _WIN32 */ +#endif /* _WIN32 && !__CYGWIN__ */ #endif DEFINE_TEST(test_write_disk) @@ -326,7 +326,7 @@ DEFINE_TEST(test_write_disk) create(ae, "Test creating a file over an existing dir."); archive_entry_free(ae); -#ifdef _WIN32 +#if defined(_WIN32) && !defined(__CYGWIN__) /* A file with unusable characters in its file name. */ assert((ae = archive_entry_new()) != NULL); archive_entry_copy_pathname(ae, "f:i*l?e\"f<i>l|e"); @@ -342,6 +342,6 @@ DEFINE_TEST(test_write_disk) create_reg_file_win(ae, "Test creating a regular file" " with unusable characters in its file name"); archive_entry_free(ae); -#endif /* _WIN32 */ +#endif /* _WIN32 && !__CYGWIN__ */ #endif } diff --git a/lib/libarchive/test/test_write_disk_failures.c b/lib/libarchive/test/test_write_disk_failures.c index 03304d4f0037..0d7b894b4ecd 100644 --- a/lib/libarchive/test/test_write_disk_failures.c +++ b/lib/libarchive/test/test_write_disk_failures.c @@ -34,7 +34,7 @@ __FBSDID("$FreeBSD$"); DEFINE_TEST(test_write_disk_failures) { -#if ARCHIVE_VERSION_NUMBER < 1009000 || defined(_WIN32) +#if ARCHIVE_VERSION_NUMBER < 1009000 || (defined(_WIN32) && !defined(__CYGWIN__)) skipping("archive_write_disk interface"); #else struct archive_entry *ae; diff --git a/lib/libarchive/test/test_write_disk_hardlink.c b/lib/libarchive/test/test_write_disk_hardlink.c index f9bcfae6cbc2..2ab242093a61 100644 --- a/lib/libarchive/test/test_write_disk_hardlink.c +++ b/lib/libarchive/test/test_write_disk_hardlink.c @@ -25,7 +25,14 @@ #include "test.h" __FBSDID("$FreeBSD$"); +#if defined(_WIN32) && !defined(__CYGWIN__) +/* Execution bits, Group members bits and others bits do not work. */ +#define UMASK 0177 +#define E_MASK (~0177) +#else #define UMASK 022 +#define E_MASK (~0) +#endif /* * Exercise hardlink recreation. @@ -36,7 +43,7 @@ __FBSDID("$FreeBSD$"); */ DEFINE_TEST(test_write_disk_hardlink) { -#if ARCHIVE_VERSION_NUMBER < 1009000 || defined(_WIN32) +#if ARCHIVE_VERSION_NUMBER < 1009000 skipping("archive_write_disk_hardlink tests"); #else static const char data[]="abcdefghijklmnopqrstuvwxyz"; @@ -175,7 +182,7 @@ DEFINE_TEST(test_write_disk_hardlink) * doesn't carry data for it, we consider it to be * non-authoritive for meta data as well. This is consistent * with GNU tar and BSD pax. */ - assertEqualInt(st.st_mode, (S_IFREG | 0755) & ~UMASK); + assertEqualInt(st.st_mode & E_MASK, (S_IFREG | 0755) & ~UMASK); assertEqualInt(st.st_size, sizeof(data)); assertEqualInt(st.st_nlink, 2); @@ -194,7 +201,7 @@ DEFINE_TEST(test_write_disk_hardlink) * common file formats that store a size of zero for * hardlinks. */ assert(0 == stat("link2a", &st)); - assertEqualInt(st.st_mode, (S_IFREG | 0755) & ~UMASK); + assertEqualInt(st.st_mode & E_MASK, (S_IFREG | 0755) & ~UMASK); assertEqualInt(st.st_size, sizeof(data)); assertEqualInt(st.st_nlink, 2); @@ -207,12 +214,12 @@ DEFINE_TEST(test_write_disk_hardlink) /* Test #3 */ assert(0 == stat("link3a", &st)); - assertEqualInt(st.st_mode, (S_IFREG | 0755) & ~UMASK); + assertEqualInt(st.st_mode & E_MASK, (S_IFREG | 0755) & ~UMASK); assertEqualInt(st.st_size, sizeof(data)); assertEqualInt(st.st_nlink, 2); assert(0 == stat("link3b", &st2)); - assertEqualInt(st2.st_mode, (S_IFREG | 0755) & ~UMASK); + assertEqualInt(st2.st_mode & E_MASK, (S_IFREG | 0755) & ~UMASK); assertEqualInt(st2.st_size, sizeof(data)); assertEqualInt(st2.st_nlink, 2); assertEqualInt(st.st_ino, st2.st_ino); @@ -220,12 +227,12 @@ DEFINE_TEST(test_write_disk_hardlink) /* Test #4 */ assert(0 == stat("link4a", &st)); - assertEqualInt(st.st_mode, (S_IFREG | 0755) & ~UMASK); + assertEqualInt(st.st_mode & E_MASK, (S_IFREG | 0755) & ~UMASK); assertEqualInt(st.st_size, sizeof(data)); assertEqualInt(st.st_nlink, 2); assert(0 == stat("link4b", &st2)); - assertEqualInt(st2.st_mode, (S_IFREG | 0755) & ~UMASK); + assertEqualInt(st2.st_mode & E_MASK, (S_IFREG | 0755) & ~UMASK); assertEqualInt(st2.st_size, sizeof(data)); assertEqualInt(st2.st_nlink, 2); assertEqualInt(st.st_ino, st2.st_ino); diff --git a/lib/libarchive/test/test_write_disk_perms.c b/lib/libarchive/test/test_write_disk_perms.c index 87e2a2d168aa..3d9be27e5964 100644 --- a/lib/libarchive/test/test_write_disk_perms.c +++ b/lib/libarchive/test/test_write_disk_perms.c @@ -25,7 +25,7 @@ #include "test.h" __FBSDID("$FreeBSD$"); -#if ARCHIVE_VERSION_NUMBER >= 1009000 && !defined(_WIN32) +#if ARCHIVE_VERSION_NUMBER >= 1009000 && (!defined(_WIN32) || defined(__CYGWIN__)) #define UMASK 022 @@ -125,7 +125,7 @@ defaultgid(void) DEFINE_TEST(test_write_disk_perms) { -#if ARCHIVE_VERSION_NUMBER < 1009000 || defined(_WIN32) +#if ARCHIVE_VERSION_NUMBER < 1009000 || (defined(_WIN32) && !defined(__CYGWIN__)) skipping("archive_write_disk interface"); #else struct archive *a; diff --git a/lib/libarchive/test/test_write_disk_secure.c b/lib/libarchive/test/test_write_disk_secure.c index 4c014b164057..d41748907b8f 100644 --- a/lib/libarchive/test/test_write_disk_secure.c +++ b/lib/libarchive/test/test_write_disk_secure.c @@ -55,7 +55,7 @@ DEFINE_TEST(test_write_disk_secure) archive_entry_free(ae); assert(0 == archive_write_finish_entry(a)); -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__CYGWIN__) /* Write a symlink to the dir above. */ assert((ae = archive_entry_new()) != NULL); archive_entry_copy_pathname(ae, "link_to_dir"); @@ -187,7 +187,7 @@ DEFINE_TEST(test_write_disk_secure) assert(0 == archive_write_finish(a)); #endif -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__CYGWIN__) /* Test the entries on disk. */ assert(0 == lstat("dir", &st)); failure("dir: st.st_mode=%o", st.st_mode); |