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_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_accessf(struct path_cxt *pc, int mode, const char *path, ...)
|
||||
__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;
|
||||
}
|
||||
|
||||
|
||||
int ul_path_get_dirfd(struct path_cxt *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;
|
||||
}
|
||||
|
||||
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 dir, rc;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue