#include "efivars.h"
#include "udev.h"
-static void print_property(struct udev_device *dev, bool test, const char *name, const char *value)
-{
+static void print_property(struct udev_device *dev, bool test, const char *name, const char *value) {
char s[256];
s[0] = '\0';
}
/* We found the ESP on this disk, and also found a root
- * partition, nice! Let's export its UUID*/
+ * partition, nice! Let's export its UUID */
if (found_esp && root_id)
- udev_builtin_add_property(dev, test, "ID_PART_GPT_AUTO_ROOT", root_id);
+ udev_builtin_add_property(dev, test, "ID_PART_GPT_AUTO_ROOT_UUID", root_id);
#endif
return 0;
}
-static int probe_superblocks(blkid_probe pr)
-{
+static int probe_superblocks(blkid_probe pr) {
struct stat st;
int rc;
return blkid_do_safeprobe(pr);
}
-static int builtin_blkid(struct udev_device *dev, int argc, char *argv[], bool test)
-{
+static int builtin_blkid(struct udev_device *dev, int argc, char *argv[], bool test) {
+ const char *root_partition;
int64_t offset = 0;
bool noraid = false;
_cleanup_close_ int fd = -1;
const char *name;
int nvals;
int i;
- size_t len;
int err = 0;
bool is_gpt = false;
if (err < 0)
goto out;
- log_debug("probe %s %sraid offset=%llu",
+ log_debug("probe %s %sraid offset=%"PRIu64,
udev_device_get_devnode(dev),
- noraid ? "no" : "", (unsigned long long) offset);
+ noraid ? "no" : "", offset);
err = probe_superblocks(pr);
if (err < 0)
goto out;
+ /* If we are a partition then our parent passed on the root
+ * partition UUID to us */
+ root_partition = udev_device_get_property_value(dev, "ID_PART_GPT_AUTO_ROOT_UUID");
+
nvals = blkid_probe_numof_values(pr);
for (i = 0; i < nvals; i++) {
- if (blkid_probe_get_value(pr, i, &name, &data, &len))
+ if (blkid_probe_get_value(pr, i, &name, &data, NULL))
continue;
- len = strnlen((char *) data, len);
- print_property(dev, test, name, (char *) data);
+ print_property(dev, test, name, data);
+ /* Is this a disk with GPT partition table? */
if (streq(name, "PTTYPE") && streq(data, "gpt"))
is_gpt = true;
+
+ /* Is this a partition that matches the root partition
+ * property we inherited from our parent? */
+ if (root_partition && streq(name, "PART_ENTRY_UUID") && streq(data, root_partition))
+ udev_builtin_add_property(dev, test, "ID_PART_GPT_AUTO_ROOT", "1");
}
if (is_gpt)