openwrt-packages/utils/gummiboot/patches/020-fix-dev-mapping.patch

55 lines
1.7 KiB
Diff

--- a/src/setup/setup.c
+++ b/src/setup/setup.c
@@ -83,6 +83,9 @@ static int verify_esp(const char *p, uin
blkid_probe b = NULL;
int r;
const char *v;
+ char buf[1024];
+
+ memset(buf, 0, sizeof(buf));
if (statfs(p, &sfs) < 0) {
fprintf(stderr, "Failed to check file system type of %s: %m\n", p);
@@ -122,24 +125,38 @@ static int verify_esp(const char *p, uin
return -ENODEV;
}
- r = asprintf(&t, "/dev/block/%u:%u", major(st.st_dev), minor(st.st_dev));
+ r = asprintf(&t, "/sys/dev/block/%u:%u", major(st.st_dev), minor(st.st_dev));
if (r < 0) {
fprintf(stderr, "Out of memory.\n");
return -ENOMEM;
}
+ r = readlink(t, buf, sizeof(buf) - 1);
+ if (r < 0) {
+ fprintf(stderr, "Failed to identify device node for block device %u:%u\n", major(st.st_dev), minor(st.st_dev));
+ return -ENOMEM;
+ }
+
+ r = asprintf(&t, "/dev/%s", basename(buf));
+ if (r < 0) {
+ fprintf(stderr, "Out of memory.\n");
+ return -ENOMEM;
+ }
+
errno = 0;
b = blkid_new_probe_from_filename(t);
- free(t);
if (!b) {
if (errno != 0) {
- fprintf(stderr, "Failed to open file system %s: %m\n", p);
+ fprintf(stderr, "Failed to open file system %s on %s: %m\n", p, t);
+ free(t);
return -errno;
}
+ free(t);
fprintf(stderr, "Out of memory.\n");
return -ENOMEM;
}
+ free(t);
blkid_probe_enable_superblocks(b, 1);
blkid_probe_set_superblocks_flags(b, BLKID_SUBLKS_TYPE);