From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/nu/AutoCharFn.h | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Src/nu/AutoCharFn.h (limited to 'Src/nu/AutoCharFn.h') diff --git a/Src/nu/AutoCharFn.h b/Src/nu/AutoCharFn.h new file mode 100644 index 00000000..3b5b7750 --- /dev/null +++ b/Src/nu/AutoCharFn.h @@ -0,0 +1,50 @@ +#ifndef NULLSOFT_UTILITY_AUTOCHARFN_H +#define NULLSOFT_UTILITY_AUTOCHARFN_H + +/* Winamp defines this, but this little block lets us use this thing outside of Winamp */ +#ifndef FILENAME_SIZE +#define FILENAME_SIZE (MAX_PATH*4) +#define REMOVE_FILENAME_SIZE +#endif + + +#include +#include + +class AutoCharFn +{ +public: + AutoCharFn(const wchar_t *filename) + { + out[0]=0; + if (!filename) + return; + if (PathIsURLW(filename)) + { + WideCharToMultiByte(CP_ACP, 0, filename, -1, out, FILENAME_SIZE, NULL, NULL); + return ; + } + + BOOL unconvertable = FALSE; + WideCharToMultiByte(CP_ACP, WC_NO_BEST_FIT_CHARS, filename, -1, out, FILENAME_SIZE, NULL, &unconvertable); + + if (unconvertable) + { + wchar_t temp[MAX_PATH]; + if (GetShortPathNameW(filename, temp, MAX_PATH)) + WideCharToMultiByte(CP_ACP, 0, temp, -1, out, FILENAME_SIZE, NULL, NULL); + + } + } + + operator char *() { return out; } +private: + char out[FILENAME_SIZE]; +}; + + +#ifdef REMOVE_FILENAME_SIZE +#undef FILENAME_SIZE +#endif + +#endif -- cgit