aboutsummaryrefslogtreecommitdiffstats
path: root/utils
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2017-08-27 06:01:31 -0700
committerChris Robinson <[email protected]>2017-08-27 06:01:31 -0700
commitf1bbf2e48aaa6d0bc2688cb21443f93e3246b1c7 (patch)
tree7cd296c240cb1a253a7003bdb5d185257d4f1ffd /utils
parentbfcde9ae8ac4cd3ecdb128397eec2913ba90142d (diff)
Use a common header for Unicode-awareness on Windows
Diffstat (limited to 'utils')
-rw-r--r--utils/bsincgen.c80
-rw-r--r--utils/makehrtf.c82
2 files changed, 3 insertions, 159 deletions
diff --git a/utils/bsincgen.c b/utils/bsincgen.c
index ba0116cb..40e487ba 100644
--- a/utils/bsincgen.c
+++ b/utils/bsincgen.c
@@ -39,59 +39,7 @@
#include <string.h>
#include <stdlib.h>
-#ifdef _WIN32
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-static char *ToUTF8(const wchar_t *from)
-{
- char *out = NULL;
- int len;
- if((len=WideCharToMultiByte(CP_UTF8, 0, from, -1, NULL, 0, NULL, NULL)) > 0)
- {
- out = calloc(sizeof(*out), len);
- WideCharToMultiByte(CP_UTF8, 0, from, -1, out, len, NULL, NULL);
- out[len-1] = 0;
- }
- return out;
-}
-
-static WCHAR *FromUTF8(const char *str)
-{
- WCHAR *out = NULL;
- int len;
-
- if((len=MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0)) > 0)
- {
- out = calloc(sizeof(WCHAR), len);
- MultiByteToWideChar(CP_UTF8, 0, str, -1, out, len);
- out[len-1] = 0;
- }
- return out;
-}
-
-
-static FILE *my_fopen(const char *fname, const char *mode)
-{
- WCHAR *wname=NULL, *wmode=NULL;
- FILE *file = NULL;
-
- wname = FromUTF8(fname);
- wmode = FromUTF8(mode);
- if(!wname)
- fprintf(stderr, "Failed to convert UTF-8 filename: \"%s\"\n", fname);
- else if(!wmode)
- fprintf(stderr, "Failed to convert UTF-8 mode: \"%s\"\n", mode);
- else
- file = _wfopen(wname, wmode);
-
- free(wname);
- free(wmode);
-
- return file;
-}
-#define fopen my_fopen
-#endif
+#include "win_main_utf8.h"
#ifndef M_PI
@@ -409,32 +357,6 @@ static void Sinc4GenerateTables(FILE *output, const double rejection)
}
-#ifdef _WIN32
-#define main my_main
-int main(int argc, char *argv[]);
-
-static char **arglist;
-static void cleanup_arglist(void)
-{
- int i;
- for(i = 0;arglist[i];i++)
- free(arglist[i]);
- free(arglist);
-}
-
-int wmain(int argc, const wchar_t *wargv[])
-{
- int i;
-
- atexit(cleanup_arglist);
- arglist = calloc(sizeof(*arglist), argc+1);
- for(i = 0;i < argc;i++)
- arglist[i] = ToUTF8(wargv[i]);
-
- return main(argc, arglist);
-}
-#endif
-
int main(int argc, char *argv[])
{
FILE *output;
diff --git a/utils/makehrtf.c b/utils/makehrtf.c
index a4286ee3..3e848dde 100644
--- a/utils/makehrtf.c
+++ b/utils/makehrtf.c
@@ -77,6 +77,8 @@
#include "getopt.h"
#endif
+#include "win_main_utf8.h"
+
// Rely (if naively) on OpenAL's header for the types used for serialization.
#include "AL/al.h"
#include "AL/alext.h"
@@ -90,60 +92,6 @@
#endif
-#ifdef _WIN32
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-static char *ToUTF8(const wchar_t *from)
-{
- char *out = NULL;
- int len;
- if((len=WideCharToMultiByte(CP_UTF8, 0, from, -1, NULL, 0, NULL, NULL)) > 0)
- {
- out = calloc(sizeof(*out), len);
- WideCharToMultiByte(CP_UTF8, 0, from, -1, out, len, NULL, NULL);
- out[len-1] = 0;
- }
- return out;
-}
-
-static WCHAR *FromUTF8(const char *str)
-{
- WCHAR *out = NULL;
- int len;
-
- if((len=MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0)) > 0)
- {
- out = calloc(sizeof(WCHAR), len);
- MultiByteToWideChar(CP_UTF8, 0, str, -1, out, len);
- out[len-1] = 0;
- }
- return out;
-}
-
-
-static FILE *my_fopen(const char *fname, const char *mode)
-{
- WCHAR *wname=NULL, *wmode=NULL;
- FILE *file = NULL;
-
- wname = FromUTF8(fname);
- wmode = FromUTF8(mode);
- if(!wname)
- fprintf(stderr, "Failed to convert UTF-8 filename: \"%s\"\n", fname);
- else if(!wmode)
- fprintf(stderr, "Failed to convert UTF-8 mode: \"%s\"\n", mode);
- else
- file = _wfopen(wname, wmode);
-
- free(wname);
- free(wmode);
-
- return file;
-}
-#define fopen my_fopen
-#endif
-
// The epsilon used to maintain signal stability.
#define EPSILON (1e-9)
@@ -2913,32 +2861,6 @@ static void PrintHelp(const char *argv0, FILE *ofile)
fprintf(ofile, " Use of '%%r' will be substituted with the data set sample rate.\n");
}
-#ifdef _WIN32
-#define main my_main
-int main(int argc, char *argv[]);
-
-static char **arglist;
-static void cleanup_arglist(void)
-{
- int i;
- for(i = 0;arglist[i];i++)
- free(arglist[i]);
- free(arglist);
-}
-
-int wmain(int argc, const wchar_t *wargv[])
-{
- int i;
-
- atexit(cleanup_arglist);
- arglist = calloc(sizeof(*arglist), argc+1);
- for(i = 0;i < argc;i++)
- arglist[i] = ToUTF8(wargv[i]);
-
- return main(argc, arglist);
-}
-#endif
-
// Standard command line dispatch.
int main(int argc, char *argv[])
{