Make path retrieval consistent in xkb_compose_table_new_from_locale()
authorEmmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Thu, 16 Jul 2020 23:09:47 +0000 (01:09 +0200)
committerRan Benita <ran@unusedvar.com>
Thu, 23 Jul 2020 06:39:53 +0000 (09:39 +0300)
src/compose/paths.c
src/compose/paths.h
src/compose/table.c

index aab4507..dab71ac 100644 (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 *
index 53d7415..bc5150f 100644 (file)
@@ -30,7 +30,7 @@ resolve_locale(const char *locale);
 const char *
 get_xlocaledir_path(void);
 
-const char *
+char *
 get_xcomposefile_path(void);
 
 char *
index 1843c46..38d4406 100644 (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");
+    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;
     }