lib/path: add ul_path_get_abspath()
Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
parent
a6f0da166e
commit
e74e5401e1
2 changed files with 36 additions and 1 deletions
|
@ -39,6 +39,9 @@ void *ul_path_get_dialect(struct path_cxt *pc);
|
||||||
int ul_path_set_enoent_redirect(struct path_cxt *pc, int (*func)(struct path_cxt *, const char *, int *));
|
int ul_path_set_enoent_redirect(struct path_cxt *pc, int (*func)(struct path_cxt *, const char *, int *));
|
||||||
int ul_path_get_dirfd(struct path_cxt *pc);
|
int ul_path_get_dirfd(struct path_cxt *pc);
|
||||||
|
|
||||||
|
char *ul_path_get_abspath(struct path_cxt *pc, char *buf, size_t bufsz, const char *path, ...)
|
||||||
|
__attribute__ ((__format__ (__printf__, 4, 5)));
|
||||||
|
|
||||||
int ul_path_access(struct path_cxt *pc, int mode, const char *path);
|
int ul_path_access(struct path_cxt *pc, int mode, const char *path);
|
||||||
int ul_path_accessf(struct path_cxt *pc, int mode, const char *path, ...)
|
int ul_path_accessf(struct path_cxt *pc, int mode, const char *path, ...)
|
||||||
__attribute__ ((__format__ (__printf__, 3, 4)));
|
__attribute__ ((__format__ (__printf__, 3, 4)));
|
||||||
|
|
34
lib/path.c
34
lib/path.c
|
@ -176,7 +176,6 @@ static const char *get_absdir(struct path_cxt *pc)
|
||||||
return pc->path_buffer;
|
return pc->path_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int ul_path_get_dirfd(struct path_cxt *pc)
|
int ul_path_get_dirfd(struct path_cxt *pc)
|
||||||
{
|
{
|
||||||
assert(pc);
|
assert(pc);
|
||||||
|
@ -209,6 +208,39 @@ static const char *ul_path_mkpath(struct path_cxt *pc, const char *path, va_list
|
||||||
return pc->path_buffer;
|
return pc->path_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *ul_path_get_abspath(struct path_cxt *pc, char *buf, size_t bufsz, const char *path, ...)
|
||||||
|
{
|
||||||
|
if (path) {
|
||||||
|
int rc;
|
||||||
|
va_list ap;
|
||||||
|
const char *tail = NULL;
|
||||||
|
|
||||||
|
va_start(ap, path);
|
||||||
|
tail = ul_path_mkpath(pc, path, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
rc = snprintf(buf, bufsz, "%s/%s/%s",
|
||||||
|
pc->prefix ? pc->prefix : "",
|
||||||
|
pc->dir_path,
|
||||||
|
tail);
|
||||||
|
|
||||||
|
if ((size_t)rc >= bufsz) {
|
||||||
|
errno = ENAMETOOLONG;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const char *tmp = get_absdir(pc);
|
||||||
|
|
||||||
|
if (!tmp)
|
||||||
|
return NULL;
|
||||||
|
strncpy(buf, tmp, bufsz);
|
||||||
|
buf[bufsz - 1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int ul_path_access(struct path_cxt *pc, int mode, const char *path)
|
int ul_path_access(struct path_cxt *pc, int mode, const char *path)
|
||||||
{
|
{
|
||||||
int dir, rc;
|
int dir, rc;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue