summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Ross-Gowan <rossy@jrg.systems>2017-11-18 22:36:20 +1100
committerJames Ross-Gowan <rossy@jrg.systems>2017-11-19 21:10:56 +1100
commit0bdbe2bc53fc2e927084dfd2c21e452d83b26e1d (patch)
tree1c1e09d00c89e5584eb3d34a34e49c10ebe609a7
parentcd6f964b567d77c01971277a908824e3b01db86f (diff)
downloadmpv-0bdbe2bc53fc2e927084dfd2c21e452d83b26e1d.tar.bz2
mpv-0bdbe2bc53fc2e927084dfd2c21e452d83b26e1d.tar.xz
win32: fix semantics of POSIX 2008 locale stubs
This sliences some warnings about unused values and statements with no effect, but it also fixes a logic error with freelocale(), since previously it would not work as expected when used in the body of an if statement without braces. Uses real functions, because with macros, I don't think there is a way to silence the "statement with no effect" warnings in the case where the return value of uselocale() is ignored. As for replacing the these functions with working implementations, I don't think this is possible for mpv's use-case, since MSVCRT does not support UTF-8 locales, or any locale with multibyte characters that are three or more bytes long. See: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/setlocale-wsetlocale
-rw-r--r--osdep/io.c14
-rw-r--r--osdep/io.h9
2 files changed, 19 insertions, 4 deletions
diff --git a/osdep/io.c b/osdep/io.c
index a49ee82638..3b2061e55b 100644
--- a/osdep/io.c
+++ b/osdep/io.c
@@ -799,4 +799,18 @@ int msync(void *addr, size_t length, int flags)
}
#endif
+locale_t newlocale(int category, const char *locale, locale_t base)
+{
+ return (locale_t)1;
+}
+
+locale_t uselocale(locale_t locobj)
+{
+ return (locale_t)1;
+}
+
+void freelocale(locale_t locobj)
+{
+}
+
#endif // __MINGW32__
diff --git a/osdep/io.h b/osdep/io.h
index 666928892d..e0d6284baa 100644
--- a/osdep/io.h
+++ b/osdep/io.h
@@ -193,11 +193,12 @@ int msync(void *addr, size_t length, int flags);
#define glob(...) mp_glob(__VA_ARGS__)
#define globfree(...) mp_globfree(__VA_ARGS__)
-// There is not anything that helps with this on Windows.
+// These are stubs since there is not anything that helps with this on Windows.
#define locale_t int
-#define newlocale(a, b, c) 1
-#define uselocale(a) 1
-#define freelocale(a)
+#define LC_ALL_MASK 0
+locale_t newlocale(int, const char *, locale_t);
+locale_t uselocale(locale_t);
+void freelocale(locale_t);
#else /* __MINGW32__ */