util: introduce join() to speed up simple string concatenations
This commit is contained in:
parent
57a8eca84a
commit
911a4828e0
|
@ -78,7 +78,8 @@ static int process_dir(Unit *u, const char *unit_path, const char *name, const c
|
|||
assert(name);
|
||||
assert(suffix);
|
||||
|
||||
if (asprintf(&path, "%s/%s%s", unit_path, name, suffix) < 0)
|
||||
path = join(unit_path, "/", name, suffix, NULL);
|
||||
if (!path)
|
||||
return -ENOMEM;
|
||||
|
||||
if (u->meta.manager->unit_path_cache &&
|
||||
|
|
|
@ -105,7 +105,6 @@ char **strv_new_ap(const char *x, va_list ap) {
|
|||
unsigned n = 0, i = 0;
|
||||
va_list aq;
|
||||
|
||||
|
||||
if (x) {
|
||||
n = 1;
|
||||
|
||||
|
|
48
src/util.c
48
src/util.c
|
@ -5493,6 +5493,54 @@ finish:
|
|||
return r;
|
||||
}
|
||||
|
||||
char *join(const char *x, ...) {
|
||||
va_list ap;
|
||||
size_t l;
|
||||
char *r, *p;
|
||||
|
||||
va_start(ap, x);
|
||||
|
||||
if (x) {
|
||||
l = strlen(x);
|
||||
|
||||
for (;;) {
|
||||
const char *t;
|
||||
|
||||
t = va_arg(ap, const char *);
|
||||
if (!t)
|
||||
break;
|
||||
|
||||
l += strlen(t);
|
||||
}
|
||||
} else
|
||||
l = 0;
|
||||
|
||||
va_end(ap);
|
||||
|
||||
r = new(char, l+1);
|
||||
if (!r)
|
||||
return NULL;
|
||||
|
||||
if (x) {
|
||||
p = stpcpy(r, x);
|
||||
|
||||
va_start(ap, x);
|
||||
|
||||
for (;;) {
|
||||
const char *t;
|
||||
|
||||
t = va_arg(ap, const char *);
|
||||
if (!t)
|
||||
break;
|
||||
|
||||
p = stpcpy(p, t);
|
||||
}
|
||||
} else
|
||||
r[0] = 0;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
static const char *const ioprio_class_table[] = {
|
||||
[IOPRIO_CLASS_NONE] = "none",
|
||||
[IOPRIO_CLASS_RT] = "realtime",
|
||||
|
|
|
@ -458,6 +458,8 @@ int dirent_ensure_type(DIR *d, struct dirent *de);
|
|||
int in_search_path(const char *path, char **search);
|
||||
int get_files_in_directory(const char *path, char ***list);
|
||||
|
||||
char *join(const char *x, ...) _sentinel_;
|
||||
|
||||
#define NULSTR_FOREACH(i, l) \
|
||||
for ((i) = (l); (i) && *(i); (i) = strchr((i), 0)+1)
|
||||
|
||||
|
|
Loading…
Reference in New Issue