0
0
mirror of https://github.com/mpv-player/mpv.git synced 2024-09-20 03:52:22 +02:00

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).
This commit is contained in:
wm4 2018-03-09 04:10:28 +01:00 committed by Kevin Mitchell
parent b2073d08b0
commit 782fa455b5
2 changed files with 30 additions and 25 deletions

View File

@ -19,7 +19,6 @@
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <locale.h>
#include <math.h>
#include <assert.h>
@ -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)

View File

@ -22,6 +22,7 @@
#include <assert.h>
#include <string.h>
#include <pthread.h>
#include <locale.h>
#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);