summaryrefslogtreecommitdiff
path: root/src/share/grabbag/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/share/grabbag/file.c')
-rw-r--r--src/share/grabbag/file.c51
1 files changed, 8 insertions, 43 deletions
diff --git a/src/share/grabbag/file.c b/src/share/grabbag/file.c
index a7b2b62e..2c67bebf 100644
--- a/src/share/grabbag/file.c
+++ b/src/share/grabbag/file.c
@@ -41,7 +41,13 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h> /* for strrchr() */
+#if defined _WIN32 && !defined __CYGWIN__
+// for GetFileInformationByHandle() etc
+#include <windows.h>
+#include <winbase.h>
+#endif
#include "share/grabbag.h"
+#include "share/compat.h"
void grabbag__file_copy_metadata(const char *srcpath, const char *destpath)
@@ -123,8 +129,8 @@ FLAC__bool grabbag__file_are_same(const char *f1, const char *f2)
BY_HANDLE_FILE_INFORMATION info1, info2;
HANDLE h1, h2;
BOOL ok = 1;
- h1 = grabbag__CreateFile_utf8(f1, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
- h2 = grabbag__CreateFile_utf8(f2, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+ h1 = CreateFile_utf8(f1, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+ h2 = CreateFile_utf8(f2, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(h1 == INVALID_HANDLE_VALUE || h2 == INVALID_HANDLE_VALUE)
ok = 0;
ok &= GetFileInformationByHandle(h1, &info1);
@@ -180,44 +186,3 @@ FILE *grabbag__file_get_binary_stdout(void)
return stdout;
}
-
-#if defined _WIN32 && !defined __CYGWIN__
-
-/* convert UTF-8 back to WCHAR. Caller is responsible for freeing memory */
-static wchar_t *wchar_from_utf8(const char *str)
-{
- wchar_t *widestr;
- int len;
-
- if (!str)
- return NULL;
- if ((len = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0)) == 0)
- return NULL;
- if ((widestr = (wchar_t *)malloc(len*sizeof(wchar_t))) == NULL)
- return NULL;
- if (MultiByteToWideChar(CP_UTF8, 0, str, -1, widestr, len) == 0) {
- free(widestr);
- widestr = NULL;
- }
-
- return widestr;
-}
-
-HANDLE WINAPI grabbag__CreateFile_utf8(const char *lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile)
-{
- if (!flac_internal_get_utf8_filenames()) {
- return CreateFileA(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
- } else {
- wchar_t *wname;
- HANDLE handle = INVALID_HANDLE_VALUE;
-
- if ((wname = wchar_from_utf8(lpFileName)) != NULL) {
- handle = CreateFileW(wname, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
- free(wname);
- }
-
- return handle;
- }
-}
-
-#endif