X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=compat%2Flib%2Fbylabel.c;h=5a40a70e6eb5af34dfbe3d388a99904a38c80df2;hb=9c07a116ba53b31ac0efd178e5a737fd0584fe14;hp=065d52985c5629ec810e53f2ae46953bf045b4c1;hpb=43460f04f3920ae39f345a2fb39d000a890a4283;p=dump.git diff --git a/compat/lib/bylabel.c b/compat/lib/bylabel.c index 065d529..5a40a70 100644 --- a/compat/lib/bylabel.c +++ b/compat/lib/bylabel.c @@ -12,6 +12,8 @@ */ #include +#include +#include #include #include #include @@ -19,8 +21,11 @@ #include #include #include +#include #include "bylabel.h" +#ifndef HAVE_BLKID + #define PROC_PARTITIONS "/proc/partitions" #define DEVLABELDIR "/dev" @@ -28,12 +33,14 @@ #define EXT2_SUPER_SIZE sizeof(struct ext2_super_block) #define EXT2_SUPER_MAGIC 0xEF53 +#define VOLNAMSZ 16 + struct ext2_super_block { unsigned char s_dummy1[56]; unsigned char s_magic[2]; unsigned char s_dummy2[46]; unsigned char s_uuid[16]; - unsigned char s_volume_name[16]; + unsigned char s_volume_name[VOLNAMSZ]; }; #define ext2magic(s) ((unsigned int) s.s_magic[0] + (((unsigned int) s.s_magic[1]) << 8)) @@ -55,11 +62,11 @@ 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, EXT2_SUPER_OFFSET, SEEK_SET) != EXT2_SUPER_OFFSET || + 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); @@ -70,7 +77,9 @@ get_label_uuid(const char *device, char **label, char *uuid) { /* superblock is ext2 - now what is its label? */ memcpy(uuid, e2sb.s_uuid, sizeof(e2sb.s_uuid)); - *label = strdup(e2sb.s_volume_name); + *label = malloc(VOLNAMSZ + 1); + strncpy(*label, e2sb.s_volume_name, VOLNAMSZ); + (*label)[VOLNAMSZ] = 0; return 0; } @@ -248,3 +257,5 @@ get_device_label(const char * spec) { } return NULL; } + +#endif /* !HAVE_BLKID */