Brad King [Wed, 18 Nov 2009 14:14:08 +0000 (09:14 -0500)]
Create ADD_TEST_28 macro to approximate CMake 2.8
CMake 2.8 provides a new ADD_TEST(NAME) signature that simplifies
creation of tests that refer to executables built in the project. We
create an ADD_TEST_28 macro to approximate the new signature but work
with CMake 2.6.
Brad King [Wed, 18 Nov 2009 14:14:00 +0000 (09:14 -0500)]
Require CMake 2.6.3 or higher
Previously we required CMake 2.6.1 or higher, but CMake 2.6.3 provides
component-wise VERSION_LESS, VERSION_GREATER, and VERSION_EQUAL tests in
the if() command and the CMAKE_VERSION variable. Once the running CMake
is known to be 2.6.3 or higher, tests against its version are simple.
We also use the FATAL_ERROR option to CMAKE_MINIMUM_REQUIRED() to ensure
that CMake 2.4 gives up with an error immediately.
Brad King [Mon, 16 Nov 2009 16:29:46 +0000 (11:29 -0500)]
Add try-compile for 'major'
We define MAJOR_IN_MKDEV and MAJOR_IN_SYSMACROS from CMake by checking
sys/mkdev.h and sys/sysmacros.h for 'major'. Previously these macros
were left unconfigured for CMake builds.
Brad King [Mon, 16 Nov 2009 16:29:40 +0000 (11:29 -0500)]
Include test.h first in test main.c sources
This change makes the main.c source for each test executable consistent
with the other test sources. It also ensures that config.h (through
test.h) is included before system headers, thus configuring system
header feature macros correctly.
Brad King [Mon, 16 Nov 2009 16:29:18 +0000 (11:29 -0500)]
Initialize passwd/group lookup result
The "result" argument to functions get(pwu|grg)id_r and get(pw|gr)name_r
does not appear in the signatures provided on older platforms. We set
the pointer to the result memory in case the function ignores it, thus
ensuring initialization.
Brad King [Mon, 16 Nov 2009 16:28:59 +0000 (11:28 -0500)]
Extract ACL octal digit using mask of type 'int'
In archive_read_support_format_tar.c we mask a mode with ~0777777 to
erase the non-ACL octal digits. The mode is represented by int64_t so
the compiler sign-extends the our literal mask from type int to int64_t
for application of the & operator.
Unfortunately the resulting int64_t type is not allowed in switch() on
some old compilers (like HP). Since we are looking only for values that
fit in an int after the mask anyway, we might as well cast to int for
the entire mask operation. This also avoids depending on the compiler
to preserve the intention of the mask with sign-extension, making the
code easier to understand anyway.
Brad King [Mon, 16 Nov 2009 16:28:51 +0000 (11:28 -0500)]
Simplify try-compile for SIZE_MAX
This constant may be defined in one of a few headers that we always
include anyway. It is simpler and more reliable to look for the
constant in all the possible headers at once. Otherwise we would need
to store the result for each header in a separate cache entry.
Tim Kientzle [Fri, 13 Nov 2009 06:27:46 +0000 (01:27 -0500)]
Work around a compiler warning pointed out by Bill Hoffman.
Also, clean up the whitespace here to match the BSD style
that's used in the rest of libarchive.
Brad King [Wed, 11 Nov 2009 17:13:34 +0000 (12:13 -0500)]
Fix Borland integer constants
Some versions of Borland provide <stdint.h>, so we use it when possible.
However, the 64-bit signed and unsigned integer min/max constants cause
overflow warnings from Borland itself! For these constants we fall back
on our default definitions.
Brad King [Wed, 11 Nov 2009 14:20:26 +0000 (09:20 -0500)]
Use ARCHIVE_ERRNO_FILE_FORMAT instead of EILSEQ
We define ARCHIVE_ERRNO_FILE_FORMAT in "archive_platform.h" for
compatibility with platforms that do not have EILSEQ. Therefore we
should use it in "archive_write_set_format_pax.c".
Brad King [Wed, 11 Nov 2009 14:20:14 +0000 (09:20 -0500)]
Fix size_t and ssize_t defaults on Borland
We use more generic decision tests to select these types. The new tests
choose the proper types for Borland while preserving reasonable defaults
for other compilers.
Brad King [Wed, 11 Nov 2009 14:20:01 +0000 (09:20 -0500)]
Select stdint.h or inttypes.h in archive.h
Since archive.h cannot use try-compile results it must memorize the
availability of integer type headers for every platform. We split the
decision of which header to use out from the actual #include line by
defining __LA_STDINT_H to the chosen header.
Brad King [Wed, 11 Nov 2009 14:19:55 +0000 (09:19 -0500)]
Do not redefine stat and file mode macros
Some windows compilers define macros like O_RDONLY and S_ISBLK with
leading underscores (e.g. _O_RDONLY and _S_ISBLK). In our windows
compatibility header "archive_windows.h" we define the non-prefixed
names so that the rest of our code can use them everywhere. However,
some windows compilers also define the non-prefixed names. On these
compilers we should not redefine them.
Brad King [Wed, 11 Nov 2009 14:19:34 +0000 (09:19 -0500)]
Use macro for 64-bit integer literal suffixes
Some compilers, such as Borland and VS 6, define __int64 instead of the
more standard long long. Integer literals of type __int64 use the
suffix 'i64' instead of 'll'. We define the helper macros
ARCHIVE_LITERAL_LL(n)
ARCHIVE_LITERAL_ULL(n)
for 'long long' and 'unsigned long long' literals. The macros use the
proper suffix for the current compiler.
Brad King [Wed, 11 Nov 2009 14:19:19 +0000 (09:19 -0500)]
Fix wincrypt.h inclusion on VS 6
The VS 6 version of wincrypt.h only works if _WIN32_WINNT >= 0x0400.
We block its inclusion through windows.h by defining NOCRYPT, and then
define _WIN32_WINNT and include it only when necessary.
- Value stored to 'ret' is never read.
- Value stored to 'cpio' is never read.
- Although the value stored to 'v' is used in the enclosing expression,
the value is never actually read from 'v'.
- Value stored to 'line' is never read.
- Value stored to 'h' is never read.
- Value stored to 'old_entry' during its initialization is never read.
- Value stored to 'dest' is never read.
Tim Kientzle [Sun, 8 Nov 2009 07:06:02 +0000 (02:06 -0500)]
Thanks to Xavier for pointing out that the security.capability xattr
on Linux must be restored last. Let's try moving xattr restore to
after file data and see if that works any better; we may end up having
to do a full xattr restore both before and after the file data.
This also changes the behavior of xattr restore failures; they now
cause warnings when the entry is finished (which can be as late as
archive_write_close()) rather than when the header is written.
Tim Kientzle [Sun, 8 Nov 2009 02:33:34 +0000 (21:33 -0500)]
Be a little more careful about identifying mdoc-format manpages.
In particular, I recently had the update script pick up and try
to convert libarchive.so.5. Ouch.
Tim Kientzle [Sat, 7 Nov 2009 23:35:18 +0000 (18:35 -0500)]
Make the CTest integration simpler and a little more robust
by just reading list.h directly into cmake. This only requires
a suitable "DEFINE_TEST" macro.
Tim Kientzle [Sat, 7 Nov 2009 07:31:15 +0000 (02:31 -0500)]
MinGW defines a value of S_IFBLK which is both useless and wrong.
Comment out this sanity-check on MinGW. (It already doesn't apply
to VC++ because Microsoft doesn't define S_IFBLK.)
test_entry sanity-checks that S_IFBLK has the expected value on every
platform, even though libarchive per se doesn't depend on this. So far,
MinGW is the only platform that's ever broken one of these checks, which
is reassuring, since it means that clients can reasonably pass unaltered
st_mode values into libarchive. Even on MinGW, it will work, since
MinGW can never actually set S_IFBLK (Windows filesystems don't support it).
Improve detecting LZMA stream data.
- Checking of the first byte of LZMA stream.
* lzma of XZ Utils with option -e records 0x5d in the first byte.
* It is possible that lzma of LZMA SDK records various data in the
first byte.
- Checking of second and third bytes of LZMA stream.
* lzma of LZMA SDK with option -d12,-d13,-d14 and -d15 records
0x1000,0x2000,0x4000 and 0x8000 in second through fifth bytes
of LZMA stream. It means second and third bytes are not always
zero.
- Checking of sixth through fourteenth bytes of LZMA stream.
* This bytes are recorded uncompressed size and lzma of XZ Utils
always records -1 in this field.
Björn Jacke [Fri, 6 Nov 2009 11:42:45 +0000 (06:42 -0500)]
add support for setting timestamps with ns resolution. utimensat and
futimens are defined in POSIX.1-2008. They are available on Linux since
glibc 2.6 and kernel 2.6.22.
Tim Kientzle [Mon, 2 Nov 2009 04:39:11 +0000 (23:39 -0500)]
Rename LOCALE_DE to LOCALE_UTF8, since the code assumes it's a UTF8 locale. Set it to NULL on Windows, change some of the tests to skip when this is NULL. This removes most of the assertion failures in test_entry.