mirror of
https://github.com/systemd/systemd.git
synced 2024-12-12 11:44:13 +08:00
locale: several coding style fixlets
- add missing assertions, - rename arguments for storing results, - always initialize results on success, - use _cleanup_ attribute at more places, etc.
This commit is contained in:
parent
901339702c
commit
76400a623f
@ -26,6 +26,9 @@
|
||||
#include "tmpfile-util.h"
|
||||
|
||||
static bool startswith_comma(const char *s, const char *prefix) {
|
||||
assert(s);
|
||||
assert(prefix);
|
||||
|
||||
s = startswith(s, prefix);
|
||||
if (!s)
|
||||
return false;
|
||||
@ -54,6 +57,8 @@ static const char* systemd_language_fallback_map(void) {
|
||||
}
|
||||
|
||||
static void context_free_x11(Context *c) {
|
||||
assert(c);
|
||||
|
||||
c->x11_layout = mfree(c->x11_layout);
|
||||
c->x11_options = mfree(c->x11_options);
|
||||
c->x11_model = mfree(c->x11_model);
|
||||
@ -61,11 +66,15 @@ static void context_free_x11(Context *c) {
|
||||
}
|
||||
|
||||
static void context_free_vconsole(Context *c) {
|
||||
assert(c);
|
||||
|
||||
c->vc_keymap = mfree(c->vc_keymap);
|
||||
c->vc_keymap_toggle = mfree(c->vc_keymap_toggle);
|
||||
}
|
||||
|
||||
void context_clear(Context *c) {
|
||||
assert(c);
|
||||
|
||||
locale_context_clear(&c->locale_context);
|
||||
context_free_x11(c);
|
||||
context_free_vconsole(c);
|
||||
@ -96,6 +105,8 @@ int vconsole_read_data(Context *c, sd_bus_message *m) {
|
||||
_cleanup_close_ int fd = -EBADF;
|
||||
struct stat st;
|
||||
|
||||
assert(c);
|
||||
|
||||
/* Do not try to re-read the file within single bus operation. */
|
||||
if (m) {
|
||||
if (m == c->vc_cache)
|
||||
@ -136,6 +147,8 @@ int x11_read_data(Context *c, sd_bus_message *m) {
|
||||
struct stat st;
|
||||
int r;
|
||||
|
||||
assert(c);
|
||||
|
||||
/* Do not try to re-read the file within single bus operation. */
|
||||
if (m) {
|
||||
if (m == c->x11_cache)
|
||||
@ -232,6 +245,8 @@ int vconsole_write_data(Context *c) {
|
||||
_cleanup_strv_free_ char **l = NULL;
|
||||
int r;
|
||||
|
||||
assert(c);
|
||||
|
||||
r = load_env_file(NULL, "/etc/vconsole.conf", &l);
|
||||
if (r < 0 && r != -ENOENT)
|
||||
return r;
|
||||
@ -267,6 +282,8 @@ int x11_write_data(Context *c) {
|
||||
_cleanup_(unlink_and_freep) char *temp_path = NULL;
|
||||
int r;
|
||||
|
||||
assert(c);
|
||||
|
||||
if (isempty(c->x11_layout) &&
|
||||
isempty(c->x11_model) &&
|
||||
isempty(c->x11_variant) &&
|
||||
@ -320,17 +337,23 @@ int x11_write_data(Context *c) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int read_next_mapping(const char* filename,
|
||||
unsigned min_fields, unsigned max_fields,
|
||||
FILE *f, unsigned *n, char ***a) {
|
||||
static int read_next_mapping(
|
||||
const char *filename,
|
||||
unsigned min_fields,
|
||||
unsigned max_fields,
|
||||
FILE *f,
|
||||
unsigned *n,
|
||||
char ***ret) {
|
||||
|
||||
assert(f);
|
||||
assert(n);
|
||||
assert(a);
|
||||
assert(ret);
|
||||
|
||||
for (;;) {
|
||||
_cleanup_strv_free_ char **b = NULL;
|
||||
_cleanup_free_ char *line = NULL;
|
||||
size_t length;
|
||||
char *l, **b;
|
||||
const char *l;
|
||||
int r;
|
||||
|
||||
r = read_line(f, LONG_LINE_MAX, &line);
|
||||
@ -351,24 +374,23 @@ static int read_next_mapping(const char* filename,
|
||||
|
||||
length = strv_length(b);
|
||||
if (length < min_fields || length > max_fields) {
|
||||
log_error("Invalid line %s:%u, ignoring.", filename, *n);
|
||||
strv_free(b);
|
||||
log_warning("Invalid line %s:%u, ignoring.", strna(filename), *n);
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
*a = b;
|
||||
*ret = TAKE_PTR(b);
|
||||
return 1;
|
||||
}
|
||||
|
||||
*ret = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int vconsole_convert_to_x11(Context *c) {
|
||||
const char *map;
|
||||
int modified = -1;
|
||||
int r, modified = -1;
|
||||
|
||||
map = systemd_kbd_model_map();
|
||||
assert(c);
|
||||
|
||||
if (isempty(c->vc_keymap)) {
|
||||
modified =
|
||||
@ -380,15 +402,15 @@ int vconsole_convert_to_x11(Context *c) {
|
||||
context_free_x11(c);
|
||||
} else {
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
unsigned n = 0;
|
||||
const char *map;
|
||||
|
||||
map = systemd_kbd_model_map();
|
||||
f = fopen(map, "re");
|
||||
if (!f)
|
||||
return -errno;
|
||||
|
||||
for (;;) {
|
||||
for (unsigned n = 0;;) {
|
||||
_cleanup_strv_free_ char **a = NULL;
|
||||
int r;
|
||||
|
||||
r = read_next_mapping(map, 5, UINT_MAX, f, &n, &a);
|
||||
if (r < 0)
|
||||
@ -432,9 +454,12 @@ int vconsole_convert_to_x11(Context *c) {
|
||||
return modified > 0;
|
||||
}
|
||||
|
||||
int find_converted_keymap(const char *x11_layout, const char *x11_variant, char **new_keymap) {
|
||||
int find_converted_keymap(const char *x11_layout, const char *x11_variant, char **ret) {
|
||||
_cleanup_free_ char *n = NULL;
|
||||
|
||||
assert(x11_layout);
|
||||
assert(ret);
|
||||
|
||||
if (x11_variant)
|
||||
n = strjoin(x11_layout, "-", x11_variant);
|
||||
else
|
||||
@ -453,14 +478,13 @@ int find_converted_keymap(const char *x11_layout, const char *x11_variant, char
|
||||
|
||||
uncompressed = access(p, F_OK) == 0;
|
||||
if (uncompressed || access(pz, F_OK) == 0) {
|
||||
log_debug("Found converted keymap %s at %s",
|
||||
n, uncompressed ? p : pz);
|
||||
|
||||
*new_keymap = TAKE_PTR(n);
|
||||
log_debug("Found converted keymap %s at %s", n, uncompressed ? p : pz);
|
||||
*ret = TAKE_PTR(n);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
*ret = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -468,19 +492,18 @@ int find_legacy_keymap(Context *c, char **ret) {
|
||||
const char *map;
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
_cleanup_free_ char *new_keymap = NULL;
|
||||
unsigned n = 0;
|
||||
unsigned best_matching = 0;
|
||||
int r;
|
||||
|
||||
assert(c);
|
||||
assert(!isempty(c->x11_layout));
|
||||
|
||||
map = systemd_kbd_model_map();
|
||||
|
||||
f = fopen(map, "re");
|
||||
if (!f)
|
||||
return -errno;
|
||||
|
||||
for (;;) {
|
||||
for (unsigned n = 0;;) {
|
||||
_cleanup_strv_free_ char **a = NULL;
|
||||
unsigned matching = 0;
|
||||
|
||||
@ -492,7 +515,7 @@ int find_legacy_keymap(Context *c, char **ret) {
|
||||
|
||||
/* Determine how well matching this entry is */
|
||||
if (streq(c->x11_layout, a[1]))
|
||||
/* If we got an exact match, this is best */
|
||||
/* If we got an exact match, this is the best */
|
||||
matching = 10;
|
||||
else {
|
||||
/* We have multiple X layouts, look for an
|
||||
@ -500,7 +523,7 @@ int find_legacy_keymap(Context *c, char **ret) {
|
||||
* but the first layout stripped off. */
|
||||
if (startswith_comma(c->x11_layout, a[1]))
|
||||
matching = 5;
|
||||
else {
|
||||
else {
|
||||
_cleanup_free_ char *x = NULL;
|
||||
|
||||
/* If that didn't work, strip off the
|
||||
@ -528,8 +551,7 @@ int find_legacy_keymap(Context *c, char **ret) {
|
||||
|
||||
/* The best matching entry so far, then let's save that */
|
||||
if (matching >= MAX(best_matching, 1u)) {
|
||||
log_debug("Found legacy keymap %s with score %u",
|
||||
a[0], matching);
|
||||
log_debug("Found legacy keymap %s with score %u", a[0], matching);
|
||||
|
||||
if (matching > best_matching) {
|
||||
best_matching = matching;
|
||||
@ -560,26 +582,25 @@ int find_legacy_keymap(Context *c, char **ret) {
|
||||
}
|
||||
|
||||
*ret = TAKE_PTR(new_keymap);
|
||||
return (bool) *ret;
|
||||
return !!*ret;
|
||||
}
|
||||
|
||||
int find_language_fallback(const char *lang, char **language) {
|
||||
int find_language_fallback(const char *lang, char **ret) {
|
||||
const char *map;
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
unsigned n = 0;
|
||||
int r;
|
||||
|
||||
assert(lang);
|
||||
assert(language);
|
||||
assert(ret);
|
||||
|
||||
map = systemd_language_fallback_map();
|
||||
|
||||
f = fopen(map, "re");
|
||||
if (!f)
|
||||
return -errno;
|
||||
|
||||
for (;;) {
|
||||
_cleanup_strv_free_ char **a = NULL;
|
||||
int r;
|
||||
|
||||
r = read_next_mapping(map, 2, 2, f, &n, &a);
|
||||
if (r <= 0)
|
||||
@ -587,17 +608,17 @@ int find_language_fallback(const char *lang, char **language) {
|
||||
|
||||
if (streq(lang, a[0])) {
|
||||
assert(strv_length(a) == 2);
|
||||
*language = TAKE_PTR(a[1]);
|
||||
*ret = TAKE_PTR(a[1]);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
assert_not_reached();
|
||||
}
|
||||
|
||||
int x11_convert_to_vconsole(Context *c) {
|
||||
bool modified = false;
|
||||
|
||||
assert(c);
|
||||
|
||||
if (isempty(c->x11_layout)) {
|
||||
modified =
|
||||
!isempty(c->vc_keymap) ||
|
||||
@ -609,19 +630,15 @@ int x11_convert_to_vconsole(Context *c) {
|
||||
int r;
|
||||
|
||||
r = find_converted_keymap(c->x11_layout, c->x11_variant, &new_keymap);
|
||||
if (r == 0)
|
||||
r = find_legacy_keymap(c, &new_keymap);
|
||||
if (r < 0)
|
||||
return r;
|
||||
else if (r == 0) {
|
||||
r = find_legacy_keymap(c, &new_keymap);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
if (r == 0)
|
||||
/* We search for layout-variant match first, but then we also look
|
||||
* for anything which matches just the layout. So it's accurate to say
|
||||
* that we couldn't find anything which matches the layout. */
|
||||
log_notice("No conversion to virtual console map found for \"%s\".",
|
||||
c->x11_layout);
|
||||
log_notice("No conversion to virtual console map found for \"%s\".", c->x11_layout);
|
||||
|
||||
if (!streq_ptr(c->vc_keymap, new_keymap)) {
|
||||
free_and_replace(c->vc_keymap, new_keymap);
|
||||
|
@ -27,9 +27,9 @@ typedef struct Context {
|
||||
Hashmap *polkit_registry;
|
||||
} Context;
|
||||
|
||||
int find_converted_keymap(const char *x11_layout, const char *x11_variant, char **new_keymap);
|
||||
int find_legacy_keymap(Context *c, char **new_keymap);
|
||||
int find_language_fallback(const char *lang, char **language);
|
||||
int find_converted_keymap(const char *x11_layout, const char *x11_variant, char **ret);
|
||||
int find_legacy_keymap(Context *c, char **ret);
|
||||
int find_language_fallback(const char *lang, char **ret);
|
||||
|
||||
int locale_read_data(Context *c, sd_bus_message *m);
|
||||
int vconsole_read_data(Context *c, sd_bus_message *m);
|
||||
|
@ -78,6 +78,7 @@ static int vconsole_reload(sd_bus *bus) {
|
||||
static int vconsole_convert_to_x11_and_emit(Context *c, sd_bus_message *m) {
|
||||
int r;
|
||||
|
||||
assert(c);
|
||||
assert(m);
|
||||
|
||||
r = x11_read_data(c, m);
|
||||
@ -104,6 +105,7 @@ static int vconsole_convert_to_x11_and_emit(Context *c, sd_bus_message *m) {
|
||||
static int x11_convert_to_vconsole_and_emit(Context *c, sd_bus_message *m) {
|
||||
int r;
|
||||
|
||||
assert(c);
|
||||
assert(m);
|
||||
|
||||
r = vconsole_read_data(c, m);
|
||||
@ -136,7 +138,7 @@ static int property_get_locale(
|
||||
void *userdata,
|
||||
sd_bus_error *error) {
|
||||
|
||||
Context *c = userdata;
|
||||
Context *c = ASSERT_PTR(userdata);
|
||||
_cleanup_strv_free_ char **l = NULL;
|
||||
int r;
|
||||
|
||||
@ -160,16 +162,18 @@ static int property_get_vconsole(
|
||||
void *userdata,
|
||||
sd_bus_error *error) {
|
||||
|
||||
Context *c = userdata;
|
||||
Context *c = ASSERT_PTR(userdata);
|
||||
int r;
|
||||
|
||||
assert(property);
|
||||
|
||||
r = vconsole_read_data(c, reply);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (streq(property, "VConsoleKeymap"))
|
||||
return sd_bus_message_append_basic(reply, 's', c->vc_keymap);
|
||||
else if (streq(property, "VConsoleKeymapToggle"))
|
||||
if (streq(property, "VConsoleKeymapToggle"))
|
||||
return sd_bus_message_append_basic(reply, 's', c->vc_keymap_toggle);
|
||||
|
||||
return -EINVAL;
|
||||
@ -184,20 +188,22 @@ static int property_get_xkb(
|
||||
void *userdata,
|
||||
sd_bus_error *error) {
|
||||
|
||||
Context *c = userdata;
|
||||
Context *c = ASSERT_PTR(userdata);
|
||||
int r;
|
||||
|
||||
assert(property);
|
||||
|
||||
r = x11_read_data(c, reply);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (streq(property, "X11Layout"))
|
||||
return sd_bus_message_append_basic(reply, 's', c->x11_layout);
|
||||
else if (streq(property, "X11Model"))
|
||||
if (streq(property, "X11Model"))
|
||||
return sd_bus_message_append_basic(reply, 's', c->x11_model);
|
||||
else if (streq(property, "X11Variant"))
|
||||
if (streq(property, "X11Variant"))
|
||||
return sd_bus_message_append_basic(reply, 's', c->x11_variant);
|
||||
else if (streq(property, "X11Options"))
|
||||
if (streq(property, "X11Options"))
|
||||
return sd_bus_message_append_basic(reply, 's', c->x11_options);
|
||||
|
||||
return -EINVAL;
|
||||
@ -243,9 +249,9 @@ static int process_locale_list_item(
|
||||
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Locale assignment %s not valid, refusing.", assignment);
|
||||
}
|
||||
|
||||
static int locale_gen_process_locale(char *new_locale[static _VARIABLE_LC_MAX],
|
||||
sd_bus_error *error) {
|
||||
static int locale_gen_process_locale(char *new_locale[static _VARIABLE_LC_MAX], sd_bus_error *error) {
|
||||
int r;
|
||||
|
||||
assert(new_locale);
|
||||
|
||||
for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) {
|
||||
@ -263,13 +269,15 @@ static int locale_gen_process_locale(char *new_locale[static _VARIABLE_LC_MAX],
|
||||
SD_BUS_ERROR_INVALID_ARGS,
|
||||
"Specified locale is not installed and non-UTF-8 locale will not be auto-generated: %s",
|
||||
new_locale[p]);
|
||||
} else if (r == -EINVAL) {
|
||||
}
|
||||
if (r == -EINVAL) {
|
||||
log_error_errno(r, "Failed to enable invalid locale %s for generation.", new_locale[p]);
|
||||
return sd_bus_error_setf(error,
|
||||
SD_BUS_ERROR_INVALID_ARGS,
|
||||
"Can not enable locale generation for invalid locale: %s",
|
||||
new_locale[p]);
|
||||
} else if (r < 0) {
|
||||
}
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to enable locale for generation: %m");
|
||||
return sd_bus_error_set_errnof(error, r, "Failed to enable locale generation: %m");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user