[Frugalware-git] setup: formatdisk: write uuids to fstab

Miklos Vajna vmiklos at frugalware.org
Sat Nov 26 02:01:47 CET 2011


Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=setup.git;a=commitdiff;h=2426dc44a28ac26b9a806b572c3a410f04cc7a00

commit 2426dc44a28ac26b9a806b572c3a410f04cc7a00
Author: Miklos Vajna <vmiklos at frugalware.org>
Date:   Sat Nov 26 01:50:42 2011 +0100

formatdisk: write uuids to fstab

diff --git a/src/plugins/formatdisk.c b/src/plugins/formatdisk.c
index e8a77c1..e66e5e8 100644
--- a/src/plugins/formatdisk.c
+++ b/src/plugins/formatdisk.c
@@ -26,11 +26,14 @@
#include <limits.h>
#include <sys/stat.h>
#include <sys/mount.h>
+#include <blkid.h>

#include <setup.h>
#include <util.h>
#include "common.h"

+#define BLKGETSIZE64 _IOR(0x12,114,size_t)
+
plugin_t plugin =
{
"formatdisk",
@@ -253,6 +256,37 @@ char *selfs(char *dev)
return(strdup(dialog_vars.input_result));
}

+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;
+}
+
int doswap(GList *partlist, GList **config)
{
char *fn, *item, *ptr;
@@ -311,8 +345,10 @@ int doswap(GList *partlist, GList **config)
ptr = g_strdup_printf("%s %s", SWAPON, item);
fw_system(ptr);
FREE(ptr);
+		char *uuid = get_uuid(item);
fprintf(fp, "%-16s %-16s %-11s %-16s %-3s %s\n",
-			item, "swap", "swap", "defaults", "0", "0");
+			uuid, "swap", "swap", "defaults", "0", "0");
+		free(uuid);
}

fclose(fp);
@@ -485,8 +521,10 @@ int mountdev(char *dev, char *mountpoint, GList **config)

// make fstab entry
type = findmount(dev, 0);
-	fprintf(fp, "%-16s %-16s %-11s %-16s %-3s %s\n", dev, mountpoint,
+	char *uuid = get_uuid(dev);
+	fprintf(fp, "%-16s %-16s %-11s %-16s %-3s %s\n", uuid, mountpoint,
type, "defaults", "1", "1");
+	free(uuid);
fclose(fp);
return(0);
}


More information about the Frugalware-git mailing list