Make path retrieval consistent in xkb_compose_table_new_from_locale()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
diff --git a/src/compose/paths.c b/src/compose/paths.c
index aab4507..dab71ac 100644
--- a/src/compose/paths.c
+++ b/src/compose/paths.c
@@ -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 *
diff --git a/src/compose/paths.h b/src/compose/paths.h
index 53d7415..bc5150f 100644
--- a/src/compose/paths.h
+++ b/src/compose/paths.h
@@ -30,7 +30,7 @@ resolve_locale(const char *locale);
const char *
get_xlocaledir_path(void);
-const char *
+char *
get_xcomposefile_path(void);
char *
diff --git a/src/compose/table.c b/src/compose/table.c
index 1843c46..38d4406 100644
--- a/src/compose/table.c
+++ b/src/compose/table.c
@@ -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");
+ path = get_xcomposefile_path();
+ if (path) {
+ file = fopen(path, "rb");
if (file)
goto found_path;
}
+ free(path);
- cpath = path = get_xdg_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_home_xcompose_file_path();
+ path = get_home_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_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;
}