From 5030104f69657366d2e9136071162f62237093ec Mon Sep 17 00:00:00 2001 From: Lautis Sun Date: Wed, 7 Sep 2016 16:42:49 +0800 Subject: Fix unicode support #39 --- tinydir.h | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/tinydir.h b/tinydir.h index 0a17736..f7fbfa4 100644 --- a/tinydir.h +++ b/tinydir.h @@ -624,10 +624,10 @@ int tinydir_file_open(tinydir_file *file, const _tinydir_char_t *path) #if ((defined _MSC_VER) && (_MSC_VER >= 1400)) _tsplitpath_s( path, - drive_buf, sizeof drive_buf, - dir_name_buf, sizeof dir_name_buf, - file_name_buf, sizeof file_name_buf, - ext_buf, sizeof ext_buf); + drive_buf, _TINYDIR_PATH_MAX, + dir_name_buf, _TINYDIR_PATH_MAX, + file_name_buf, _TINYDIR_FILENAME_MAX, + ext_buf, sizeof _TINYDIR_FILENAME_MAX); #else _tsplitpath( path, @@ -636,6 +636,15 @@ int tinydir_file_open(tinydir_file *file, const _tinydir_char_t *path) file_name_buf, ext_buf); #endif + +/* _splitpath_s not work fine with only filename and widechar support */ +#ifdef _UNICODE + if (drive_buf[0] == L'\xFEFE') + drive_buf[0] = '\0'; + if (dir_name_buf[0] == L'\xFEFE') + dir_name_buf[0] = '\0'; +#endif + if (errno) { errno = EINVAL; @@ -643,11 +652,7 @@ int tinydir_file_open(tinydir_file *file, const _tinydir_char_t *path) } /* Emulate the behavior of dirname by returning "." for dir name if it's empty */ -#if ((defined _MSC_VER || defined __MINGW32__) && (defined UNICODE)) - if (drive_buf[0] == '\0' && drive_buf[1] == '\0' && dir_name_buf[0] == '\0' && dir_name_buf[1] == '\0') -#else if (drive_buf[0] == '\0' && dir_name_buf[0] == '\0') -#endif { _tinydir_strcpy(dir_name_buf, TINYDIR_STRING(".")); } -- cgit v1.2.3