From 782fa455b54f9153abefb64e26b8a25925118fc9 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 9 Mar 2018 04:10:28 +0100 Subject: player: move locale check to mp_create() The intention is to reduce annoying differences between mpv CLI and libmpv, and there's no reason to have the locale check only in libmpv (although it doesn't help with any real issues either). --- player/client.c | 36 +++++++++++------------------------- player/main.c | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+), 25 deletions(-) (limited to 'player') diff --git a/player/client.c b/player/client.c index 21c6807ad3..4a7307194a 100644 --- a/player/client.c +++ b/player/client.c @@ -19,7 +19,6 @@ #include #include #include -#include #include #include @@ -462,15 +461,18 @@ static void *core_thread(void *tag) { mpthread_set_name("mpv core"); + mpv_handle *ctx = NULL; struct MPContext *mpctx = mp_create(); - mpctx->autodetach = true; - mpv_handle *ctx = mp_new_client(mpctx->clients, "main"); - if (ctx) { - ctx->owner = true; - ctx->fuzzy_initialized = true; - m_config_set_profile(mpctx->mconfig, "libmpv", 0); - } else { - mp_destroy(mpctx); + if (mpctx) { + mpctx->autodetach = true; + ctx = mp_new_client(mpctx->clients, "main"); + if (ctx) { + ctx->owner = true; + ctx->fuzzy_initialized = true; + m_config_set_profile(mpctx->mconfig, "libmpv", 0); + } else { + mp_destroy(mpctx); + } } // Let mpv_create() return, and pass it the handle. @@ -491,24 +493,8 @@ static void *core_thread(void *tag) return NULL; } -// We mostly care about LC_NUMERIC, and how "." vs. "," is treated, -// Other locale stuff might break too, but probably isn't too bad. -static bool check_locale(void) -{ - char *name = setlocale(LC_NUMERIC, NULL); - return !name || strcmp(name, "C") == 0 || strcmp(name, "C.UTF-8") == 0; -} - mpv_handle *mpv_create(void) { - if (!check_locale()) { - // Normally, we never print anything (except if the "terminal" option - // is enabled), so this is an exception. - fprintf(stderr, "Non-C locale detected. This is not supported.\n" - "Call 'setlocale(LC_NUMERIC, \"C\");' in your code.\n"); - return NULL; - } - char tag; pthread_t thread; if (pthread_create(&thread, NULL, core_thread, &tag) != 0) diff --git a/player/main.c b/player/main.c index 66ae538d4a..bb83accb7e 100644 --- a/player/main.c +++ b/player/main.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "config.h" #include "mpv_talloc.h" @@ -263,8 +264,24 @@ static void abort_playback_cb(void *ctx) mp_abort_playback_async(mpctx); } +// We mostly care about LC_NUMERIC, and how "." vs. "," is treated, +// Other locale stuff might break too, but probably isn't too bad. +static bool check_locale(void) +{ + char *name = setlocale(LC_NUMERIC, NULL); + return !name || strcmp(name, "C") == 0 || strcmp(name, "C.UTF-8") == 0; +} + struct MPContext *mp_create(void) { + if (!check_locale()) { + // Normally, we never print anything (except if the "terminal" option + // is enabled), so this is an exception. + fprintf(stderr, "Non-C locale detected. This is not supported.\n" + "Call 'setlocale(LC_NUMERIC, \"C\");' in your code.\n"); + return NULL; + } + char *enable_talloc = getenv("MPV_LEAK_REPORT"); if (enable_talloc && strcmp(enable_talloc, "1") == 0) talloc_enable_leak_report(); @@ -441,6 +458,8 @@ int mp_initialize(struct MPContext *mpctx, char **options) int mpv_main(int argc, char *argv[]) { struct MPContext *mpctx = mp_create(); + if (!mpctx) + return 1; char **options = argv && argv[0] ? argv + 1 : NULL; // skips program name int r = mp_initialize(mpctx, options); -- cgit v1.2.3