Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=frugalwareutils.git;a=commitdiff;h=7a8efcc615aa34b146a03b503e5ac8290ae2dc24
commit 7a8efcc615aa34b146a03b503e5ac8290ae2dc24 Author: Miklos Vajna <vmik...@frugalware.org> Date: Sat Nov 26 00:21:26 2011 +0100 libfwgrubconfig: write uuids in write_entry() diff --git a/libfwgrubconfig/Makefile b/libfwgrubconfig/Makefile index b899d84..f2e406a 100644 --- a/libfwgrubconfig/Makefile +++ b/libfwgrubconfig/Makefile @@ -20,6 +20,8 @@ CFLAGS = $(LIB_CFLAGS) CFLAGS += $(shell pkg-config --cflags glib-2.0) LDFLAGS += $(shell pkg-config --libs glib-2.0) +CFLAGS += $(shell pkg-config --cflags blkid) +LDFLAGS += $(shell pkg-config --libs blkid) LDFLAGS += -lparted diff --git a/libfwgrubconfig/libfwgrubconfig.c b/libfwgrubconfig/libfwgrubconfig.c index 874d47f..5df62b8 100644 --- a/libfwgrubconfig/libfwgrubconfig.c +++ b/libfwgrubconfig/libfwgrubconfig.c @@ -35,6 +35,7 @@ #include <stdlib.h> #include <libfwutil.h> #include <glib.h> +#include <blkid.h> #include "libfwgrubconfig.h" @@ -45,6 +46,7 @@ typedef struct mdu_version_s { } mdu_version_t; #define MD_MAJOR 9 #define RAID_VERSION _IOR (MD_MAJOR, 0x10, mdu_version_t) +#define BLKGETSIZE64 _IOR(0x12,114,size_t) #define FWGRUB_LOGDEV "/dev/tty4" struct fwgrub_entry_t { @@ -460,6 +462,36 @@ static char *mount_dev(char *path) return(strdup(ptr)); } +static char* get_uuid(char *device) +{ + char path[PATH_MAX]; + int fd; + blkid_probe pr = NULL; + uint64_t size; + const char *uuid; + char *ret; + + if(!device || !strlen(device)) + return NULL; + + fd = open(device, O_RDONLY); + + if (fd < 0) + return NULL; + + pr = blkid_new_probe(); + blkid_probe_set_request (pr, BLKID_PROBREQ_UUID); + ioctl(fd, BLKGETSIZE64, &size); + blkid_probe_set_device(pr, fd, 0, size); + blkid_do_safeprobe(pr); + blkid_probe_lookup_value(pr, "UUID", &uuid, NULL); + snprintf(path, PATH_MAX, "/dev/disk/by-uuid/%s", uuid); + ret = strdup(path); + blkid_free_probe(pr); + close(fd); + return ret; +} + static int write_entry(struct fwgrub_entry_t *entry) { char *ptr; @@ -473,8 +505,12 @@ static int write_entry(struct fwgrub_entry_t *entry) if(entry->opts) { if(entry->rootdev && strlen(entry->rootdev)) + { + char *uuid = get_uuid(entry->rootdev); fprintf(entry->fp, "\tkernel %s%s%s root=%s %s\n", - entry->grubbootdev, entry->bootstr, entry->kernel, entry->rootdev, entry->opts); + entry->grubbootdev, entry->bootstr, entry->kernel, uuid, entry->opts); + free(uuid); + } else // probably rootdev is already included in ->opts fprintf(entry->fp, "\tkernel %s%s%s %s\n", _______________________________________________ Frugalware-git mailing list Frugalware-git@frugalware.org http://frugalware.org/mailman/listinfo/frugalware-git