diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2019-06-19 23:29:19 +0200 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2019-06-19 23:29:19 +0200 |
commit | 6d946490ba835807327b36263c7a3b53653ca762 (patch) | |
tree | 09e06ebfbabb1f13fb9faa61314c87f82079e2a0 /src | |
parent | sd-resolve: suppress false positive MSan warnings (diff) | |
download | systemd-6d946490ba835807327b36263c7a3b53653ca762.tar.xz systemd-6d946490ba835807327b36263c7a3b53653ca762.zip |
tree-wide: drop alloca() in loop
Diffstat (limited to 'src')
-rw-r--r-- | src/delta/delta.c | 12 | ||||
-rw-r--r-- | src/getty-generator/getty-generator.c | 6 | ||||
-rw-r--r-- | src/journal/journalctl.c | 6 | ||||
-rw-r--r-- | src/journal/journald-audit.c | 7 | ||||
-rw-r--r-- | src/libsystemd/sd-device/sd-device.c | 6 | ||||
-rw-r--r-- | src/locale/keymap-util.c | 4 |
6 files changed, 28 insertions, 13 deletions
diff --git a/src/delta/delta.c b/src/delta/delta.c index 63baa74794..08d8867431 100644 --- a/src/delta/delta.c +++ b/src/delta/delta.c @@ -371,7 +371,7 @@ static int enumerate_dir( return 0; } -static bool should_skip_path(const char *prefix, const char *suffix) { +static int should_skip_path(const char *prefix, const char *suffix) { #if HAVE_SPLIT_USR _cleanup_free_ char *target = NULL; const char *p; @@ -383,10 +383,16 @@ static bool should_skip_path(const char *prefix, const char *suffix) { return false; NULSTR_FOREACH(p, prefixes) { + _cleanup_free_ char *tmp = NULL; + if (path_startswith(dirname, p)) continue; - if (path_equal(target, strjoina(p, "/", suffix))) { + tmp = path_join(p, suffix); + if (!tmp) + return -ENOMEM; + + if (path_equal(target, tmp)) { log_debug("%s redirects to %s, skipping.", dirname, target); return true; } @@ -423,7 +429,7 @@ static int process_suffix(const char *suffix, const char *onlyprefix) { NULSTR_FOREACH(p, prefixes) { _cleanup_free_ char *t = NULL; - if (should_skip_path(p, suffix)) + if (should_skip_path(p, suffix) > 0) continue; t = strjoin(p, "/", suffix); diff --git a/src/getty-generator/getty-generator.c b/src/getty-generator/getty-generator.c index 35501b61f5..8610ab6705 100644 --- a/src/getty-generator/getty-generator.c +++ b/src/getty-generator/getty-generator.c @@ -189,9 +189,11 @@ static int run(const char *dest, const char *dest_early, const char *dest_late) "sclp_line0", "ttysclp0", "3270!tty1") { - const char *p; + _cleanup_free_ char *p = NULL; - p = strjoina("/sys/class/tty/", j); + p = path_join("/sys/class/tty", j); + if (!p) + return -ENOMEM; if (access(p, F_OK) < 0) continue; diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 3d053c59f0..d10bced3b7 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -1678,9 +1678,11 @@ static int add_syslog_identifier(sd_journal *j) { assert(j); STRV_FOREACH(i, arg_syslog_identifier) { - char *u; + _cleanup_free_ char *u = NULL; - u = strjoina("SYSLOG_IDENTIFIER=", *i); + u = strjoin("SYSLOG_IDENTIFIER=", *i); + if (!u) + return -ENOMEM; r = sd_journal_add_match(j, u, 0); if (r < 0) return r; diff --git a/src/journal/journald-audit.c b/src/journal/journald-audit.c index 71d9282ed5..fae9138ecb 100644 --- a/src/journal/journald-audit.c +++ b/src/journal/journald-audit.c @@ -264,8 +264,8 @@ static int map_all_fields( if (handle_msg) { v = startswith(p, "msg='"); if (v) { + _cleanup_free_ char *c = NULL; const char *e; - char *c; /* Userspace message. It's enclosed in simple quotation marks, is not @@ -279,7 +279,10 @@ static int map_all_fields( if (!e) return 0; /* don't continue splitting up if the final quotation mark is missing */ - c = strndupa(v, e - v); + c = strndup(v, e - v); + if (!c) + return -ENOMEM; + return map_all_fields(c, map_fields_userspace, "AUDIT_FIELD_", false, iov, n_iov_allocated, n_iov); } } diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c index c2315c03fe..b1572981b1 100644 --- a/src/libsystemd/sd-device/sd-device.c +++ b/src/libsystemd/sd-device/sd-device.c @@ -1600,14 +1600,16 @@ static int device_sysattrs_read_all(sd_device *device) { return r; FOREACH_DIRENT_ALL(dent, dir, return -errno) { - char *path; + _cleanup_free_ char *path = NULL; struct stat statbuf; /* only handle symlinks and regular files */ if (!IN_SET(dent->d_type, DT_LNK, DT_REG)) continue; - path = strjoina(syspath, "/", dent->d_name); + path = path_join(syspath, dent->d_name); + if (!path) + return -ENOMEM; if (lstat(path, &statbuf) != 0) continue; diff --git a/src/locale/keymap-util.c b/src/locale/keymap-util.c index e238e5a124..c7dcd8ad38 100644 --- a/src/locale/keymap-util.c +++ b/src/locale/keymap-util.c @@ -648,11 +648,11 @@ int find_legacy_keymap(Context *c, char **ret) { if (startswith_comma(c->x11_layout, a[1])) matching = 5; else { - char *x; + _cleanup_free_ char *x = NULL; /* If that didn't work, strip off the * other layouts from the entry, too */ - x = strndupa(a[1], strcspn(a[1], ",")); + x = strndup(a[1], strcspn(a[1], ",")); if (startswith_comma(c->x11_layout, x)) matching = 1; } |