if (!sysfs_devno_to_devpath(devno, buf, sizeof(buf)))
continue;
- cn = canonicalize_path(buf);
+ cn = ul_canonicalize_path(buf);
if (!cn)
continue;
#include "c.h" /* for PATH_MAX */
#include "strutils.h"
-extern char *canonicalize_path(const char *path);
-extern char *canonicalize_path_restricted(const char *path);
-extern char *canonicalize_dm_name(const char *ptname);
-extern char *__canonicalize_dm_name(const char *prefix, const char *ptname);
+extern char *ul_canonicalize_path(const char *path);
+extern char *ul_canonicalize_path_restricted(const char *path);
+extern char *ul_canonicalize_dm_name(const char *ptname);
+extern char *ul_canonicalize_dm_name_prefixed(const char *prefix, const char *ptname);
extern char *ul_absolute_path(const char *path);
-static inline int is_relative_path(const char *path)
+static inline int ul_is_relative_path(const char *path)
{
if (!path || *path == '/')
return 0;
*
* Since 2.6.29 (patch 784aae735d9b0bba3f8b9faef4c8b30df3bf0128) kernel sysfs
* provides the real DM device names in /sys/block/<ptname>/dm/name
+ *
+ * The @prefix allows /sys to be mounted or stored outside the system root
+ * (/prefix/sys/...).
*/
-char *__canonicalize_dm_name(const char *prefix, const char *ptname)
+char *ul_canonicalize_dm_name_prefixed(const char *prefix, const char *ptname)
{
FILE *f;
size_t sz;
return res;
}
-char *canonicalize_dm_name(const char *ptname)
+char *ul_canonicalize_dm_name(const char *ptname)
{
- return __canonicalize_dm_name(NULL, ptname);
+ return ul_canonicalize_dm_name_prefixed(NULL, ptname);
}
static int is_dm_devname(char *canonical, char **name)
char cwd[PATH_MAX], *res, *p;
size_t psz, csz;
- if (!is_relative_path(path)) {
+ if (!ul_is_relative_path(path)) {
errno = EINVAL;
return NULL;
}
return 1;
if (is_dm_devname(canonical, &dmname)) {
- char *dm = canonicalize_dm_name(dmname);
+ char *dm = ul_canonicalize_dm_name(dmname);
if (dm) {
free(canonical);
canonical = dm;
* unreachable path is not an error (!), and in this case, it just duplicates
* @path.
*/
-char *canonicalize_path(const char *path)
+char *ul_canonicalize_path(const char *path)
{
char *canonical = NULL;
* Drop permissions (e.g., suid) and canonicalize the path. If the path is
* unreadable (for example, due to missing permissions), it returns NULL.
*/
-char *canonicalize_path_restricted(const char *path)
+char *ul_canonicalize_path_restricted(const char *path)
{
return ul_restricted_path_oper(path, do_canonicalize, NULL);
}
fprintf(stdout, "orig: %s\n", argv[1]);
- p = canonicalize_path(argv[1]);
+ p = ul_canonicalize_path(argv[1]);
fprintf(stdout, "real: %s\n", p);
free(p);
- p = canonicalize_path_restricted(argv[1]);
+ p = ul_canonicalize_path_restricted(argv[1]);
fprintf(stdout, "real-restricted: %s\n", p);
free(p);
snprintf(name, sizeof(name), _PATH_SYS_DEVBLOCK "/%d:%d",
major(st.st_rdev), minor(st.st_rdev));
- cn = canonicalize_path(name);
+ cn = ul_canonicalize_path(name);
if (cn)
p = stripoff_last_component(cn);
rc = p && ul_startswith(p, "loop");
if (!lc)
return -EINVAL;
- lc->filename = canonicalize_path(filename);
+ lc->filename = ul_canonicalize_path(filename);
if (!lc->filename)
return -errno;
}
/* try canonicalize the name */
- if (!dev && (cn = canonicalize_path(devname))) {
+ if (!dev && (cn = ul_canonicalize_path(devname))) {
if (strcmp(cn, devname) != 0) {
DBG(DEVNAME, ul_debug("search canonical %s", cn));
list_for_each(p, &cache->bic_devs) {
* to standard /dev/mapper/<name>.
*/
if (!strncmp(ptname, "dm-", 3) && isdigit(ptname[3])) {
- devname = canonicalize_dm_name(ptname);
+ devname = ul_canonicalize_dm_name(ptname);
if (!devname)
blkid__scan_dir("/dev/mapper", devno, NULL, &devname);
if (devname)
if (!S_ISBLK(st.st_mode))
return NULL;
- path = canonicalize_path(dev);
+ path = ul_canonicalize_path(dev);
if (!path)
return NULL;
if (v)
res = blkid_evaluate_tag(t, v, cache);
else
- res = canonicalize_path(spec);
+ res = ul_canonicalize_path(spec);
free(t);
free(v);
/* It is impossible to predict /dev/dm-N partition names. */
if (strncmp(dev, "/dev/dm-", sizeof("/dev/dm-") - 1) == 0) {
- dev_mapped = canonicalize_dm_name (dev + 5);
+ dev_mapped = ul_canonicalize_dm_name (dev + 5);
if (dev_mapped)
dev = dev_mapped;
}
char *value;
DBG(CACHE, ul_debugobj(cache, "canonicalize path %s", path));
- p = canonicalize_path(path);
+ p = ul_canonicalize_path(path);
if (p && cache) {
value = p;
}
/* try absolute path */
- if (is_relative_path(path) && (cn = ul_absolute_path(path))) {
+ if (ul_is_relative_path(path) && (cn = ul_absolute_path(path))) {
DBG(TAB, ul_debugobj(tb, "lookup absolute TARGET: '%s'", cn));
mnt_reset_iter(&itr, direction);
while (mnt_table_next_fs(tb, &itr, &fs) == 0) {
if (argc != 2)
return -1;
- char *path = canonicalize_path(argv[1]),
+ char *path = ul_canonicalize_path(argv[1]),
*mnt = path ? mnt_get_mountpoint(path) : NULL;
printf("%s: %s\n", argv[1], mnt ? : "unknown");
return -1;
int rc;
- char *path = canonicalize_path(argv[1]),
+ char *path = ul_canonicalize_path(argv[1]),
*last = NULL;
if (!path)
/*
* Search below /dev for the character device in `dev_t comparedev' variable.
* Note that realpath(3) is used here to avoid not existent devices due the
- * strdup(3) used in our canonicalize_path()!
+ * strdup(3) used in our ul_canonicalize_path()!
*/
static
#ifdef __GNUC__
assert(dev->name);
if (is_dm(dev->name))
- return __canonicalize_dm_name(lsblk->sysroot, dev->name);
+ return ul_canonicalize_dm_name_prefixed(lsblk->sysroot, dev->name);
snprintf(path, sizeof(path), "/dev/%s", dev->name);
sysfs_devname_sys_to_dev(path);
ls->st_ino = st.st_ino;
ls->st_dev = st.st_dev;
ls->type = type;
- ls->path = canonicalize_path(dir);
+ ls->path = ul_canonicalize_path(dir);
if (!*ls0)
*ls0 = ls; /* first in the list */
used = loopcxt_is_used(lc, st, bf, offset, 0, flags);
if (!used && !cn_file) {
- bf = cn_file = canonicalize_path(file);
+ bf = cn_file = ul_canonicalize_path(file);
used = loopcxt_is_used(lc, st, bf, offset, 0, flags);
}
if (!used)
used = loopcxt_is_used(lc, st, bf, offset, 0, flags);
if (!used && !cn_file) {
- bf = cn_file = canonicalize_path(file);
+ bf = cn_file = ul_canonicalize_path(file);
used = loopcxt_is_used(lc, st, bf, offset, 0, flags);
}
if (!used)
p = mnt_fs_get_target(fs);
if (p) {
- char *np = canonicalize_path_restricted(p);
+ char *np = ul_canonicalize_path_restricted(p);
if (!np)
return -EPERM;
mnt_fs_set_target(fs, np);
p = mnt_fs_get_srcpath(fs);
if (p) {
- char *np = canonicalize_path_restricted(p);
+ char *np = ul_canonicalize_path_restricted(p);
if (!np)
return -EPERM;
mnt_fs_set_source(fs, np);
if (!path)
return NULL;
- p = canonicalize_path_restricted(path);
+ p = ul_canonicalize_path_restricted(path);
if (!p)
err(MNT_EX_USAGE, "%s", path);