From: Lennart Poettering Date: Mon, 1 Aug 2011 00:39:22 +0000 (+0200) Subject: util: use join() instead of asprintf() as an optimization X-Git-Tag: v33~29 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=44d91056924e1e64699892f71121b40c46489e57;p=systemd util: use join() instead of asprintf() as an optimization --- diff --git a/src/conf-parser.c b/src/conf-parser.c index a99c7059..3bb430e3 100644 --- a/src/conf-parser.c +++ b/src/conf-parser.c @@ -88,7 +88,8 @@ int config_item_perf_lookup( else { char *key; - if (asprintf(&key, "%s.%s", section, lvalue) < 0) + key = join(section, ".", lvalue, NULL); + if (!key) return -ENOMEM; p = lookup(key, strlen(key)); diff --git a/src/load-dropin.c b/src/load-dropin.c index 984a47a2..dbdc6a41 100644 --- a/src/load-dropin.c +++ b/src/load-dropin.c @@ -50,7 +50,8 @@ static int iterate_dir(Unit *u, const char *path, UnitDependency dependency) { if (ignore_file(de->d_name)) continue; - if (asprintf(&f, "%s/%s", path, de->d_name) < 0) { + f = join(path, "/", de->d_name, NULL); + if (!f) { r = -ENOMEM; goto finish; } diff --git a/src/manager.c b/src/manager.c index cdd618e1..9e4bd51d 100644 --- a/src/manager.c +++ b/src/manager.c @@ -560,7 +560,8 @@ static void manager_build_unit_path_cache(Manager *m) { if (ignore_file(de->d_name)) continue; - if (asprintf(&p, "%s/%s", streq(*i, "/") ? "" : *i, de->d_name) < 0) { + p = join(streq(*i, "/") ? "" : *i, "/", de->d_name, NULL); + if (!p) { r = -ENOMEM; goto fail; } diff --git a/src/service.c b/src/service.c index 5c17413a..4e3b6e71 100644 --- a/src/service.c +++ b/src/service.c @@ -635,7 +635,7 @@ static int service_load_sysv_path(Service *s, const char *path) { char *d = NULL; if (chkconfig_description) - asprintf(&d, "%s %s", chkconfig_description, j); + d = join(chkconfig_description, " ", j, NULL); else d = strdup(j); @@ -805,7 +805,7 @@ static int service_load_sysv_path(Service *s, const char *path) { char *d = NULL; if (long_description) - asprintf(&d, "%s %s", long_description, t); + d = join(long_description, " ", t, NULL); else d = strdup(j); @@ -921,7 +921,8 @@ static int service_load_sysv_name(Service *s, const char *name) { char *path; int r; - if (asprintf(&path, "%s/%s", *p, name) < 0) + path = join(*p, "/", name, NULL); + if (!path) return -ENOMEM; assert(endswith(path, ".service")); @@ -942,7 +943,8 @@ static int service_load_sysv_name(Service *s, const char *name) { if (r >= 0 && s->meta.load_state == UNIT_STUB) { /* Try SUSE style boot.* init scripts */ - if (asprintf(&path, "%s/boot.%s", *p, name) < 0) + path = join(*p, "/boot.", name, NULL); + if (!path) return -ENOMEM; /* Drop .service suffix */ @@ -956,7 +958,8 @@ static int service_load_sysv_name(Service *s, const char *name) { if (r >= 0 && s->meta.load_state == UNIT_STUB) { /* Try Frugalware style rc.* init scripts */ - if (asprintf(&path, "%s/rc.%s", *p, name) < 0) + path = join(*p, "/rc.", name, NULL); + if (!path) return -ENOMEM; /* Drop .service suffix */ @@ -2987,7 +2990,6 @@ static int service_enumerate(Manager *m) { struct dirent *de; free(path); - path = NULL; path = join(*p, "/", rcnd_table[i].path, NULL); if (!path) { r = -ENOMEM; @@ -3023,8 +3025,8 @@ static int service_enumerate(Manager *m) { continue; free(fpath); - fpath = NULL; - if (asprintf(&fpath, "%s/%s/%s", *p, rcnd_table[i].path, de->d_name) < 0) { + fpath = join(path, "/", de->d_name, NULL); + if (!path) { r = -ENOMEM; goto finish; } diff --git a/src/util.c b/src/util.c index b533b26d..6382c01c 100644 --- a/src/util.c +++ b/src/util.c @@ -809,7 +809,7 @@ int parse_env_file( const char *separator, ...) { int r = 0; - char *contents, *p; + char *contents = NULL, *p; assert(fname); assert(separator); @@ -1266,8 +1266,6 @@ bool is_path(const char *p) { } char *path_make_absolute(const char *p, const char *prefix) { - char *r; - assert(p); /* Makes every item in the list an absolute path by prepending @@ -1276,10 +1274,7 @@ char *path_make_absolute(const char *p, const char *prefix) { if (path_is_absolute(p) || !prefix) return strdup(p); - if (asprintf(&r, "%s/%s", prefix, p) < 0) - return NULL; - - return r; + return join(prefix, "/", p, NULL); } char *path_make_absolute_cwd(const char *p) {