/* Returns !0 on error. * Otherwise, returns malloc'ed strings for label and uuid * (and they can't be NULL, although they can be ""). * NB: closes fd. */ static int get_label_uuid(int fd, char **label, char **uuid, const char **type) { int rv = 1; uint64_t size; struct volume_id *vid; /* fd is owned by vid now */ vid = volume_id_open_node(fd); if (ioctl(/*vid->*/fd, BLKGETSIZE64, &size) != 0) size = 0; if (volume_id_probe_all(vid, /*0,*/ size) != 0) goto ret; if (vid->label[0] != '\0' || vid->uuid[0] != '\0') { *label = xstrndup(vid->label, sizeof(vid->label)); *uuid = xstrndup(vid->uuid, sizeof(vid->uuid)); #if ENABLE_FEATURE_BLKID_TYPE *type = vid->type; dbg("found label '%s', uuid '%s', type '%s'", *label, *uuid, *type); #else dbg("found label '%s', uuid '%s'", *label, *uuid); #endif rv = 0; } ret: free_volume_id(vid); /* also closes fd */ return rv; }
/* Returns !0 on error. * Otherwise, returns malloc'ed strings for label and uuid * (and they can't be NULL, although they can be ""). * NB: closes fd. */ static int get_label_uuid(int fd, char **label, char **uuid) { int rv = 1; uint64_t size; struct volume_id *vid; /* fd is owned by vid now */ vid = volume_id_open_node(fd); if (ioctl(/*vid->*/fd, BLKGETSIZE64, &size) != 0) size = 0; if (volume_id_probe_all(vid, 0, size) != 0) goto ret; if (vid->label[0] != '\0' || vid->uuid[0] != '\0') { *label = xstrndup(vid->label, sizeof(vid->label)); *uuid = xstrndup(vid->uuid, sizeof(vid->uuid)); dbg("found label '%s', uuid '%s' on %s", *label, *uuid, device); rv = 0; } ret: free_volume_id(vid); /* also closes fd */ return rv; }
static int get_label_uuid(const char *device, char **label, char **uuid, int iso_only) { int rv = 1; uint64_t size; struct volume_id *vid; vid = volume_id_open_node(device); if (!vid) return rv; if (ioctl(vid->fd, BLKGETSIZE64, &size) != 0) size = 0; #if ENABLE_FEATURE_VOLUMEID_ISO9660 if ((iso_only ? volume_id_probe_iso9660(vid, 0) : volume_id_probe_all(vid, 0, size) ) != 0 ) { goto ret; } #else if (volume_id_probe_all(vid, 0, size) != 0) { goto ret; } #endif if (vid->label[0] != '\0' || vid->uuid[0] != '\0') { *label = xstrndup(vid->label, sizeof(vid->label)); *uuid = xstrndup(vid->uuid, sizeof(vid->uuid)); dbg("found label '%s', uuid '%s' on %s", *label, *uuid, device); rv = 0; } ret: free_volume_id(vid); return rv; }