]> err.no Git - util-linux/commitdiff
mount: use encoded labels for volume_id
authorKay Sievers <kay.sievers@vrfy.org>
Thu, 21 Jun 2007 11:31:52 +0000 (13:31 +0200)
committerKarel Zak <kzak@redhat.com>
Tue, 26 Jun 2007 10:53:16 +0000 (12:53 +0200)
The current version of libvolume_id exports the encoding function for the
symlinks names, so slashes in labels and other chars, that don't really fit
into symlink names, will work as expected with LABEL=.

configure.ac
mount/fsprobe_volumeid.c

index 5655bf0b83217288c560f667fd4fb6e534f27343..d63b99d8403d088162251fc14e74ebac7d5addc7 100644 (file)
@@ -87,7 +87,7 @@ have_volume_id=no
 if test x$with_fsprobe = xblkid; then
   UTIL_CHECK_LIB(blkid, blkid_known_fstype)
 elif test x$with_fsprobe = xvolume_id; then
-  UTIL_CHECK_LIB(volume_id, volume_id_open_fd)
+  UTIL_CHECK_LIB(volume_id, volume_id_encode_string)
 fi
 
 if test $have_blkid = no && test $have_volume_id = no; then
index 8c13987adbaabcfee811b9122eb500b272c8dfcd..4b58e720e5274b4348c97135696b95d86a9cf15f 100644 (file)
@@ -20,11 +20,13 @@ enum probe_type {
        VOLUME_ID_TYPE,
 };
 
-static char *probe(const char *device, enum probe_type type)
+static char
+*probe(const char *device, enum probe_type type)
 {
        int fd;
        uint64_t size;
        struct volume_id *id;
+       const char *val;
        char *value = NULL;
 
        fd = open(device, O_RDONLY);
@@ -42,13 +44,16 @@ static char *probe(const char *device, enum probe_type type)
        if (volume_id_probe_all(id, 0, size) == 0) {
                switch(type) {
                case VOLUME_ID_LABEL:
-                       value  = xstrdup(id->label);
+                       if (volume_id_get_label(id, &val))
+                               value  = xstrdup(val);
                        break;
                case VOLUME_ID_UUID:
-                       value  = xstrdup(id->uuid);
+                       if (volume_id_get_uuid(id, &val))
+                               value  = xstrdup(val);
                        break;
                case VOLUME_ID_TYPE:
-                       value  = xstrdup(id->type);
+                       if (volume_id_get_type(id, &val))
+                               value  = xstrdup(val);
                        break;
                default:
                        break;
@@ -72,10 +77,8 @@ fsprobe_exit(void)
 int
 fsprobe_known_fstype(const char *fstype)
 {
-       /* TODO 
        if (volume_id_get_prober_by_type(fstype) != NULL)
                return 1;
-       */
        return 0;
 }
 
@@ -101,11 +104,15 @@ const char *
 fsprobe_get_devname_by_uuid(const char *uuid)
 {
        char dev[PATH_MAX];
+       size_t len;
 
        if (!uuid)
                return NULL;
 
-       snprintf(dev, sizeof(dev), PATH_DEV_BYUUID "/%s", uuid);
+       strcpy(dev, PATH_DEV_BYUUID "/");
+       len = strlen(PATH_DEV_BYUUID "/");
+       if (!volume_id_encode_string(uuid, &dev[len], sizeof(dev) - len) != 0)
+               return NULL;
        return canonicalize(dev);
 }
 
@@ -113,11 +120,13 @@ const char *
 fsprobe_get_devname_by_label(const char *label)
 {
        char dev[PATH_MAX];
+       size_t len;
 
        if (!label)
                return NULL;
-
-       snprintf(dev, sizeof(dev), PATH_DEV_BYLABEL "/%s", label);
+       strcpy(dev, PATH_DEV_BYLABEL "/");
+       len = strlen(PATH_DEV_BYLABEL "/");
+       if (!volume_id_encode_string(label, &dev[len], sizeof(dev) - len) != 0)
+               return NULL;
        return canonicalize(dev);
 }
-