diff --git a/src/filesel.c b/src/filesel.c index 2ef29dd7..b2424a57 100644 --- a/src/filesel.c +++ b/src/filesel.c @@ -58,6 +58,7 @@ #include "struct.h" #include "global.h" #include "misc.h" +#include "osdep.h" #include "errors.h" #include "io.h" #include "windows.h" @@ -1917,30 +1918,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context #endif { #if defined(WIN32) - DWORD short_len = GetShortPathNameW((WCHAR *)filename_unicode, NULL, 0); - if (short_len > 0) - { - WCHAR * temp_str = (WCHAR *)malloc(short_len * sizeof(WCHAR)); - short_len = GetShortPathNameW((WCHAR *)filename_unicode, temp_str, short_len); - if (short_len > 0) - { - DWORD i; - for (i = 0; i < short_len && temp_str[i] != 0; i++) - filename_ansi[i] = temp_str[i]; - filename_ansi[i] = '\0'; - } - free(temp_str); - } - if (short_len == 0) - { - // generate a temporary ansi name - int i; - for (i = 0; (i < (int)sizeof(filename_ansi) - 1) && (filename_unicode[i] != 0); i++) - { - filename_ansi[i] = (filename_unicode[i] < 256) ? (byte)filename_unicode[i] : '_'; - } - filename_ansi[i] = '\0'; - } + GFX2_GetShortPathName(filename_ansi, sizeof(filename_ansi), filename_unicode); #elif defined(ENABLE_FILENAMES_ICONV) /* convert back from UTF16 to UTF8 */ char * input = (char *)filename_unicode; diff --git a/src/osdep.c b/src/osdep.c index 7a77e82b..b9bb8fd7 100644 --- a/src/osdep.c +++ b/src/osdep.c @@ -574,3 +574,33 @@ bye: return NULL; #endif } + +#if defined(WIN32) +void GFX2_GetShortPathName(char * shortname, size_t shortname_len, const word * longname) +{ + DWORD short_len = GetShortPathNameW((WCHAR *)longname, NULL, 0); + if (short_len > 0) + { + WCHAR * temp_str = (WCHAR *)GFX2_malloc(short_len * sizeof(WCHAR)); + short_len = GetShortPathNameW((WCHAR *)longname, temp_str, short_len); + if (short_len > 0) + { + DWORD i; + for (i = 0; i < short_len && temp_str[i] != 0; i++) + shortname[i] = temp_str[i]; + shortname[i] = '\0'; + } + free(temp_str); + } + if (short_len == 0) + { + // generate a temporary ansi name + int i; + for (i = 0; (i < (int)shortname_len - 1) && (longname[i] != 0); i++) + { + shortname[i] = (longname[i] < 256) ? (byte)longname[i] : '_'; + } + shortname[i] = '\0'; + } +} +#endif diff --git a/src/osdep.h b/src/osdep.h index 8ae4190b..c5ae1026 100644 --- a/src/osdep.h +++ b/src/osdep.h @@ -56,6 +56,8 @@ unsigned long Memory_free(void); #if defined(WIN32) char * Unicode_to_utf8(const word * str, size_t * utf8len); + +void GFX2_GetShortPathName(char * shortname, size_t shortname_len, const word * longname); #endif char* GFX2_GetTextClipboard(word * * unicode);