diff options
Diffstat (limited to 'src/H5win32defs.h')
| -rw-r--r-- | src/H5win32defs.h | 149 |
1 files changed, 81 insertions, 68 deletions
diff --git a/src/H5win32defs.h b/src/H5win32defs.h index 185e9b4..a1299b1 100644 --- a/src/H5win32defs.h +++ b/src/H5win32defs.h @@ -1,100 +1,113 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * - * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the files COPYING and Copyright.html. COPYING can be found at the root * - * of the source code distribution tree; Copyright.html can be found at the * - * root level of an installed copy of the electronic HDF5 document set and * - * is linked from the top-level documents page. It can also be found at * - * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * - * access to either file, you may request a copy from help@hdfgroup.org. * + * the COPYING file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* Programmer: Scott Wegner - * June 3, 2008 - * - * Purpose: This file is used to map HDF macros to Windows functions. This +/* Purpose: This file is used to map HDF macros to Windows functions. This * should get included H5private mappings, so as to override them. * Any macro not mapped here, however, will receive a similar mapping * inside H5private.h * */ +/* _MSC_VER = 192x VS2019 + * _MSC_VER = 191x VS2017 + * _MSC_VER = 1900 VS2015 + * _MSC_VER = 1800 VS2013 + * _MSC_VER = 1700 VS2012 + */ #ifdef H5_HAVE_WIN32_API -typedef struct _stati64 h5_stat_t; -typedef __int64 h5_stat_size_t; - -#define HDaccess(F,M) _access(F,M) -#define HDchdir(S) _chdir(S) -#define HDclose(F) _close(F) -#define HDdup(F) _dup(F) -#define HDfdopen(N,S) _fdopen(N,S) -#define HDfileno(F) _fileno(F) -#define HDfstat(F,B) _fstati64(F,B) -#define HDisatty(F) _isatty(F) -#define HDgetcwd(S,Z) _getcwd(S,Z) -#define HDgetdcwd(D,S,Z) _getdcwd(D,S,Z) -#define HDgetdrive() _getdrive() -#define HDlseek(F,O,W) _lseeki64(F,O,W) -#define HDlstat(S,B) _lstati64(S,B) -#define HDmkdir(S,M) _mkdir(S) -#define HDoff_t __int64 -/* _O_BINARY must be set in Windows to avoid CR-LF <-> LF EOL - * transformations when performing I/O. +/* __int64 is the correct type for the st_size field of the _stati64 struct. + * MSDN isn't very clear about this. */ -#define HDopen(S,F,M) _open(S,F|_O_BINARY,M) -#define HDread(F,M,Z) _read(F,M,Z) -#define HDrmdir(S) _rmdir(S) -#define HDsetvbuf(F,S,M,Z) setvbuf(F,S,M,(Z>1?Z:2)) -#define HDsleep(S) Sleep(S*1000) -#define HDstat(S,B) _stati64(S,B) -#define HDstrcasecmp(A,B) _stricmp(A,B) -#define HDstrtoull(S,R,N) _strtoui64(S,R,N) -#define HDstrdup(S) _strdup(S) -#define HDtzset() _tzset() -#define HDunlink(S) _unlink(S) -#define HDwrite(F,M,Z) _write(F,M,Z) +typedef struct _stati64 h5_stat_t; +typedef __int64 h5_stat_size_t; #ifdef H5_HAVE_VISUAL_STUDIO -/* - * The (void*) cast just avoids a compiler warning in H5_HAVE_VISUAL_STUDIO - */ -#define HDmemset(X,C,Z) memset((void*)(X),C,Z) struct timezone { int tz_minuteswest; int tz_dsttime; }; -#ifdef __cplusplus - extern "C" { -#endif /* __cplusplus */ - H5_DLL int Wgettimeofday(struct timeval *tv, struct timezone *tz); - H5_DLL char* Wgetlogin(void); - H5_DLL int c99_snprintf(char* str, size_t size, const char* format, ...); - H5_DLL int c99_vsnprintf(char* str, size_t size, const char* format, va_list ap); -#ifdef __cplusplus - } -#endif /* __cplusplus */ -#define HDgettimeofday(V,Z) Wgettimeofday(V,Z) -#define HDgetlogin() Wgetlogin() -#define HDsnprintf c99_snprintf /*varargs*/ -#define HDvsnprintf c99_vsnprintf - #endif /* H5_HAVE_VISUAL_STUDIO */ -/* Non-POSIX functions */ +#define HDaccess(F, M) _access(F, M) +#define HDchdir(S) _chdir(S) +#define HDclose(F) _close(F) +#define HDcreat(S, M) Wopen_utf8(S, O_CREAT | O_TRUNC | O_RDWR, M) +#define HDdup(F) _dup(F) +#define HDfdopen(N, S) _fdopen(N, S) +#define HDfileno(F) _fileno(F) +#define HDflock(F, L) Wflock(F, L) +#define HDfstat(F, B) _fstati64(F, B) +#define HDgetcwd(S, Z) _getcwd(S, Z) +#define HDgetdcwd(D, S, Z) _getdcwd(D, S, Z) +#define HDgetdrive() _getdrive() +#define HDgettimeofday(V, Z) Wgettimeofday(V, Z) +#define HDisatty(F) _isatty(F) +#define HDlseek(F, O, W) _lseeki64(F, O, W) +#define HDlstat(S, B) _lstati64(S, B) +#define HDmkdir(S, M) _mkdir(S) -/* Don't use actual pthread_self on Windows because the return - * type cannot be cast as a ulong like other systems. */ -#define HDpthread_self_ulong() ((unsigned long)GetCurrentThreadId()) +/* off_t exists on Windows, but is always a 32-bit long, even on 64-bit Windows, + * so we define HDoff_t to be __int64, which is the type of the st_size field + * of the _stati64 struct. + */ +#define HDoff_t __int64 +/* Note that the variadic HDopen macro is using a VC++ extension + * where the comma is dropped if nothing is passed to the ellipsis. + */ #ifndef H5_HAVE_MINGW -#define HDftruncate(F,L) _chsize_s(F,L) -#define HDfseek(F,O,W) _fseeki64(F,O,W) +#define HDopen(S, F, ...) Wopen_utf8(S, F, __VA_ARGS__) +#else +#define HDopen(S, F, ...) Wopen_utf8(S, F, ##__VA_ARGS__) #endif + +#define HDread(F, M, Z) _read(F, M, Z) +#define HDremove(S) Wremove_utf8(S) +#define HDrmdir(S) _rmdir(S) +#define HDsetenv(N, V, O) Wsetenv(N, V, O) +#define HDsetvbuf(F, S, M, Z) setvbuf(F, S, M, (Z > 1 ? Z : 2)) +#define HDsleep(S) Sleep(S * 1000) +#define HDstat(S, B) _stati64(S, B) +#define HDstrcasecmp(A, B) _stricmp(A, B) +#define HDstrcasestr(A, B) StrStrIA(A, B) +#define HDstrndup(S, N) H5_strndup(S, N) +#define HDstrtok_r(X, Y, Z) strtok_s(X, Y, Z) +#define HDtzset() _tzset() +#define HDunlink(S) _unlink(S) +#define HDunsetenv(N) Wsetenv(N, "", 1) +#define HDwrite(F, M, Z) _write(F, M, Z) + +#ifndef H5_HAVE_MINGW +#define HDftruncate(F, L) _chsize_s(F, L) +#define HDfseek(F, O, W) _fseeki64(F, O, W) +#endif /* H5_HAVE_MINGW */ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ +H5_DLL int Wgettimeofday(struct timeval *tv, struct timezone *tz); +H5_DLL int Wsetenv(const char *name, const char *value, int overwrite); +H5_DLL int Wflock(int fd, int operation); +H5_DLL herr_t H5_expand_windows_env_vars(char **env_var); +H5_DLL wchar_t *H5_get_utf16_str(const char *s); +H5_DLL int Wopen_utf8(const char *path, int oflag, ...); +H5_DLL int Wremove_utf8(const char *path); +H5_DLL int H5_get_win32_times(H5_timevals_t *tvs); +H5_DLL char *H5_strndup(const char *s, size_t n); +#ifdef __cplusplus +} +#endif /* __cplusplus */ + #endif /* H5_HAVE_WIN32_API */ |
