Make path retrieval consistent in xkb_compose_table_new_from_locale()

master
Emmanuel Gil Peyrot 2020-07-17 01:09:47 +02:00 committed by Ran Benita
parent 17ad0df14a
commit ddd1188d97
3 changed files with 17 additions and 19 deletions

View File

@ -143,10 +143,10 @@ resolve_locale(const char *locale)
return alias ? alias : strdup(locale);
}
const char *
char *
get_xcomposefile_path(void)
{
return secure_getenv("XCOMPOSEFILE");
return strdup_safe(secure_getenv("XCOMPOSEFILE"));
}
char *

View File

@ -30,7 +30,7 @@ resolve_locale(const char *locale);
const char *
get_xlocaledir_path(void);
const char *
char *
get_xcomposefile_path(void);
char *

View File

@ -161,8 +161,7 @@ xkb_compose_table_new_from_locale(struct xkb_context *ctx,
enum xkb_compose_compile_flags flags)
{
struct xkb_compose_table *table;
char *path = NULL;
const char *cpath;
char *path;
FILE *file;
bool ok;
@ -176,48 +175,47 @@ xkb_compose_table_new_from_locale(struct xkb_context *ctx,
if (!table)
return NULL;
cpath = get_xcomposefile_path();
if (cpath) {
file = fopen(cpath, "rb");
if (file)
goto found_path;
}
cpath = path = get_xdg_xcompose_file_path();
path = get_xcomposefile_path();
if (path) {
file = fopen(path, "rb");
if (file)
goto found_path;
}
free(path);
path = NULL;
cpath = path = get_home_xcompose_file_path();
path = get_xdg_xcompose_file_path();
if (path) {
file = fopen(path, "rb");
if (file)
goto found_path;
}
free(path);
path = NULL;
cpath = path = get_locale_compose_file_path(table->locale);
path = get_home_xcompose_file_path();
if (path) {
file = fopen(path, "rb");
if (file)
goto found_path;
}
free(path);
path = get_locale_compose_file_path(table->locale);
if (path) {
file = fopen(path, "rb");
if (file)
goto found_path;
}
free(path);
path = NULL;
log_err(ctx, "couldn't find a Compose file for locale \"%s\"\n", locale);
xkb_compose_table_unref(table);
return NULL;
found_path:
ok = parse_file(table, file, cpath);
ok = parse_file(table, file, path);
fclose(file);
if (!ok) {
free(path);
xkb_compose_table_unref(table);
return NULL;
}