libarchive: Fix Windows NT API usage in VS 6

VS 6 warns verbosely when WINVER >= 0x0500.  Avoid defining WINVER and
_WIN32_WINNT to higher than 0x0400 on VS 6.  Provide missing API
declarations in archive_windows.h when we do not get them from
<windows.h>.  Provide GetVolumePathNameW because VS 6 does not declare
it regardless of the API version.
This commit is contained in:
Brad King 2011-12-22 14:01:34 -05:00
parent 297d9f2032
commit e2dc5561bb
2 changed files with 24 additions and 2 deletions

View File

@ -60,8 +60,12 @@ OPTION(ENABLE_ACL "Enable ACL support" ON)
OPTION(ENABLE_ICONV "Enable iconv support" ON)
IF(WIN32)
SET(_WIN32_WINNT 0x0500 CACHE INTERNAL "Setting _WIN32_WINNT to 0x0500 for Windows 2000 APIs")
SET(WINVER 0x0500 CACHE INTERNAL "Setting WINVER to 0x0500 for Windows 2000 APIs")
IF(MSVC60)
SET(WINVER 0x0400)
ELSE()
SET(WINVER 0x0500)
ENDIF()
SET(_WIN32_WINNT ${WINVER})
ENDIF(WIN32)
#

View File

@ -276,4 +276,22 @@ typedef int mbstate_t;
size_t wcrtomb(char *, wchar_t, mbstate_t *);
#endif
#if defined(_MSC_VER) && _MSC_VER < 1300
WINBASEAPI BOOL WINAPI GetVolumePathNameW(
LPCWSTR lpszFileName,
LPWSTR lpszVolumePathName,
DWORD cchBufferLength
);
# if _WIN32_WINNT < 0x0500 /* windows.h not providing 0x500 API */
typedef struct _FILE_ALLOCATED_RANGE_BUFFER {
LARGE_INTEGER FileOffset;
LARGE_INTEGER Length;
} FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER;
# define FSCTL_SET_SPARSE \
CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA)
# define FSCTL_QUERY_ALLOCATED_RANGES \
CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
# endif
#endif
#endif /* LIBARCHIVE_ARCHIVE_WINDOWS_H_INCLUDED */