From: Karel Zak Date: Thu, 21 Jun 2018 11:49:03 +0000 (+0200) Subject: lib/path: allow dir-path formatting X-Git-Tag: v2.33-rc1~154 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=83bbeb77c1e64b02ad5f36bde47d22be69d08a0f;p=thirdparty%2Futil-linux.git lib/path: allow dir-path formatting Signed-off-by: Karel Zak --- diff --git a/include/path.h b/include/path.h index f372c75027..b36a735f31 100644 --- a/include/path.h +++ b/include/path.h @@ -21,7 +21,7 @@ struct path_cxt { int (*redirect_on_enoent)(struct path_cxt *, const char *, int *); }; -struct path_cxt *ul_new_path(const char *dir); +struct path_cxt *ul_new_path(const char *dir, ...); void ul_unref_path(struct path_cxt *pc); void ul_ref_path(struct path_cxt *pc); diff --git a/lib/path.c b/lib/path.c index 602674956a..34abb144af 100644 --- a/lib/path.c +++ b/lib/path.c @@ -48,7 +48,7 @@ void ul_path_init_debug(void) __UL_INIT_DEBUG_FROM_ENV(ulpath, ULPATH_DEBUG_, 0, ULPATH_DEBUG); } -struct path_cxt *ul_new_path(const char *dir) +struct path_cxt *ul_new_path(const char *dir, ...) { struct path_cxt *pc = calloc(1, sizeof(*pc)); @@ -61,8 +61,14 @@ struct path_cxt *ul_new_path(const char *dir) pc->dir_fd = -1; if (dir) { - pc->dir_path = strdup(dir); - if (!pc->dir_path) + int rc; + va_list ap; + + va_start(ap, dir); + rc = vasprintf(&pc->dir_path, dir, ap); + va_end(ap); + + if (rc < 0 || !pc->dir_path) goto fail; } return pc;