]> git.wh0rd.org - dump.git/blobdiff - compat/lib/bylabel.c
Fix rmtopen() extended format...
[dump.git] / compat / lib / bylabel.c
index c91457d3d232d7b47ff0209dc2a7c0531c79d4c6..07f0dd92320ccb112b773a9eb54e44b1a826256c 100644 (file)
@@ -11,6 +11,8 @@
  * - Ported to dump/restore
  */
 
+#include <config.h>
+#include <compatlfs.h>
 #include <stdio.h>
 #include <sys/param.h>
 #include <string.h>
 #define PROC_PARTITIONS "/proc/partitions"
 #define DEVLABELDIR    "/dev"
 
-#define EXT2_SUPER_MAGIC 0xEF53
+#define EXT2_SUPER_OFFSET      1024
+#define EXT2_SUPER_SIZE                sizeof(struct ext2_super_block)
+#define EXT2_SUPER_MAGIC       0xEF53
+
 struct ext2_super_block {
        unsigned char   s_dummy1[56];
        unsigned char   s_magic[2];
@@ -51,13 +56,13 @@ get_label_uuid(const char *device, char **label, char *uuid) {
        int fd;
        struct ext2_super_block e2sb;
 
-       fd = open(device, O_RDONLY);
+       fd = OPEN(device, O_RDONLY);
        if (fd < 0)
                return 1;
 
-       if (lseek(fd, 1024, SEEK_SET) != 1024
-           || read(fd, (char *) &e2sb, sizeof(e2sb)) != sizeof(e2sb)
-           || (ext2magic(e2sb) != EXT2_SUPER_MAGIC)) {
+       if (LSEEK(fd, EXT2_SUPER_OFFSET, SEEK_SET) != EXT2_SUPER_OFFSET ||
+           read(fd, (char *) &e2sb, EXT2_SUPER_SIZE) != EXT2_SUPER_SIZE ||
+           ext2magic(e2sb) != EXT2_SUPER_MAGIC) {
                close(fd);
                return 1;
        }
@@ -229,3 +234,18 @@ get_device_name(const char * item) {
 
        return rc;
 }
+
+const char *
+get_device_label(const char * spec) {
+       struct uuidCache_s *uc;
+
+       uuidcache_init();
+       uc = uuidCache;
+
+       while(uc) {
+               if (!strcmp(spec, uc->device))
+                       return uc->label[0] == '\0' ? NULL : strdup(uc->label);
+               uc = uc->next;
+       }
+       return NULL;
+}