]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
locale-util: introduce common helper locale_variables_free() for freeing locale varia...
authorLennart Poettering <lennart@poettering.net>
Mon, 12 Nov 2018 15:50:58 +0000 (16:50 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 14 Nov 2018 16:01:55 +0000 (17:01 +0100)
src/basic/locale-util.c
src/basic/locale-util.h
src/core/locale-setup.c
src/locale/localectl.c
src/locale/localed.c

index 8b89bd002448841333a51b1bfc520e0a7e025d7c..9ad51a197253c5be31e00c114a015728aac5821d 100644 (file)
@@ -389,6 +389,16 @@ const char *special_glyph(SpecialGlyph code) {
         return draw_table[is_locale_utf8()][code];
 }
 
+void locale_variables_free(char*l[_VARIABLE_LC_MAX]) {
+        LocaleVariable i;
+
+        if (!l)
+                return;
+
+        for (i = 0; i < _VARIABLE_LC_MAX; i++)
+                l[i] = mfree(l[i]);
+}
+
 static const char * const locale_variable_table[_VARIABLE_LC_MAX] = {
         [VARIABLE_LANG] = "LANG",
         [VARIABLE_LANGUAGE] = "LANGUAGE",
index 7762254940da8749b335d696454c7c3b3c83825b..14beece6d8bd6d8e47965e5cd15ffd3f31fdc14a 100644 (file)
@@ -66,3 +66,8 @@ static inline void freelocalep(locale_t *p) {
 
         freelocale(*p);
 }
+
+void locale_variables_free(char* l[_VARIABLE_LC_MAX]);
+static inline void locale_variables_freep(char*(*l)[_VARIABLE_LC_MAX]) {
+        locale_variables_free(*l);
+}
index 64fddca48c4dc1ad7e3af804044a213ef558b020..fff3a798c41104b7f3f031724ede695ac1b698a6 100644 (file)
@@ -15,7 +15,7 @@
 #include "virt.h"
 
 int locale_setup(char ***environment) {
-        char *variables[_VARIABLE_LC_MAX] = {};
+        _cleanup_(locale_variables_freep) char *variables[_VARIABLE_LC_MAX] = {};
         _cleanup_strv_free_ char **add = NULL;
         LocaleVariable i;
         int r;
@@ -66,25 +66,19 @@ int locale_setup(char ***environment) {
                         continue;
 
                 s = strjoin(locale_variable_to_string(i), "=", variables[i]);
-                if (!s) {
-                        r = -ENOMEM;
-                        goto finish;
-                }
+                if (!s)
+                        return -ENOMEM;
 
-                if (strv_consume(&add, s) < 0) {
-                        r = -ENOMEM;
-                        goto finish;
-                }
+                if (strv_consume(&add, s) < 0)
+                        return -ENOMEM;
         }
 
         if (strv_isempty(add)) {
                 /* If no locale is configured then default to C.UTF-8. */
 
                 add = strv_new("LANG=C.UTF-8");
-                if (!add) {
-                        r = -ENOMEM;
-                        goto finish;
-                }
+                if (!add)
+                        return -ENOMEM;
         }
 
         if (strv_isempty(*environment))
@@ -93,19 +87,11 @@ int locale_setup(char ***environment) {
                 char **merged;
 
                 merged = strv_env_merge(2, *environment, add);
-                if (!merged) {
-                        r = -ENOMEM;
-                        goto finish;
-                }
+                if (!merged)
+                        return -ENOMEM;
 
                 strv_free_and_replace(*environment, merged);
         }
 
-        r = 0;
-
-finish:
-        for (i = 0; i < _VARIABLE_LC_MAX; i++)
-                free(variables[i]);
-
-        return r;
+        return 0;
 }
index c8278a383dabbf5ba72c1629eb65bfdd0376f1a7..75e7a55676b57513ab36dbaccbd7a3ec191bb61e 100644 (file)
@@ -49,10 +49,10 @@ static void status_info_clear(StatusInfo *info) {
 }
 
 static void print_overridden_variables(void) {
-        int r;
-        char *variables[_VARIABLE_LC_MAX] = {};
-        LocaleVariable j;
+        _cleanup_(locale_variables_freep) char *variables[_VARIABLE_LC_MAX] = {};
         bool print_warning = true;
+        LocaleVariable j;
+        int r;
 
         if (arg_transport != BUS_TRANSPORT_LOCAL)
                 return;
@@ -75,7 +75,7 @@ static void print_overridden_variables(void) {
                         "locale.LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION]);
         if (r < 0 && r != -ENOENT) {
                 log_warning_errno(r, "Failed to read /proc/cmdline: %m");
-                goto finish;
+                return;
         }
 
         for (j = 0; j < _VARIABLE_LC_MAX; j++)
@@ -88,9 +88,6 @@ static void print_overridden_variables(void) {
                         } else
                                 log_warning("                  %s=%s", locale_variable_to_string(j), variables[j]);
                 }
- finish:
-        for (j = 0; j < _VARIABLE_LC_MAX; j++)
-                free(variables[j]);
 }
 
 static void print_status_info(StatusInfo *i) {
index 043fffaccb72800c2b1e9020b2ec377cf2ed9bc8..21d1ded65cd26a166368564ea27a34b16bfd6415 100644 (file)
@@ -255,20 +255,13 @@ static int property_get_xkb(
         return -EINVAL;
 }
 
-static void locale_free(char ***l) {
-        int p;
-
-        for (p = 0; p < _VARIABLE_LC_MAX; p++)
-                (*l)[p] = mfree((*l)[p]);
-}
-
 static int method_set_locale(sd_bus_message *m, void *userdata, sd_bus_error *error) {
-        Context *c = userdata;
+        _cleanup_(locale_variables_freep) char *new_locale[_VARIABLE_LC_MAX] = {};
         _cleanup_strv_free_ char **settings = NULL, **l = NULL;
-        char *new_locale[_VARIABLE_LC_MAX] = {}, **i;
-        _cleanup_(locale_free) _unused_ char **dummy = new_locale;
+        Context *c = userdata;
         bool modified = false;
         int interactive, p, r;
+        char **i;
 
         assert(m);
         assert(c);