diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2014-06-23 05:07:06 +0400 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2014-06-23 05:07:06 +0400 |
commit | 77f357728f708dd7a19a62110f34fa9afa5e9213 (patch) | |
tree | 5a3ef21544f4141ab13bfc12f69b7de6000e8b9a /source/blender/blenlib/BLI_fileops.h | |
parent | 489937e1e7f89b3c21a4e13feaffbd400527f118 (diff) |
D605: Fixes for proper handling of wchar_t paths in MinGW.
* Fixed different not-in-sync #ifdef blocks for struct stat variants under Windows.
Comments have been left to indicate the portions of BLI_fileops.h and
BLI_fileops_types.h that need to stay in sync.
* Added BLI_wstat() to de-duplicate #ifdef blocks for stat() variants on Windows.
* Fix for opendir() and associate functions in MinGW not working properly with
non-ASCII, MBCS-compatible paths.
MinGW (FREE_WINDOWS) has opendir() and _wopendir(), and only the
latter accepts a path name of wchar_t type. Rather than messing up with
extra #ifdef's here and there, Blender's own implementations of opendir()
and related functions are used to properly support paths with non-ASCII,
MBCS-compatible characters.
Tested with MSVC 2013 Express, MinGW32 (gcc 4.6.2) and MinGW-w64 (gcc 4.7.1).
Differential Revision: https://developer.blender.org/D605
Reviewed By: campbellbarton
Diffstat (limited to 'source/blender/blenlib/BLI_fileops.h')
-rw-r--r-- | source/blender/blenlib/BLI_fileops.h | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/source/blender/blenlib/BLI_fileops.h b/source/blender/blenlib/BLI_fileops.h index c032b606900..2d1e1d84882 100644 --- a/source/blender/blenlib/BLI_fileops.h +++ b/source/blender/blenlib/BLI_fileops.h @@ -60,17 +60,23 @@ int BLI_delete(const char *path, bool dir, bool recursive); int BLI_move(const char *path, const char *to); int BLI_create_symlink(const char *path, const char *to); +/* keep in sync with the definition of struct direntry in BLI_fileops_types.h */ #ifdef WIN32 -# ifndef __MINGW64__ +# if (defined(_MSC_VER) && (_MSC_VER >= 1500)) || defined(__MINGW64__) typedef struct _stat64 BLI_stat_t; +# elif defined(__MINGW32__) +typedef struct _stati64 BLI_stat_t; # else -typedef struct stat BLI_stat_t; -#endif +typedef struct _stat BLI_stat_t; +# endif #else typedef struct stat BLI_stat_t; #endif int BLI_stat(const char *path, BLI_stat_t *buffer); +#ifdef WIN32 +int BLI_wstat(const wchar_t *path, BLI_stat_t *buffer); +#endif /* Directories */ |