aboutsummaryrefslogtreecommitdiff
path: root/core/busybox/patches/fsck-resolve-uuid.patch
diff options
context:
space:
mode:
Diffstat (limited to 'core/busybox/patches/fsck-resolve-uuid.patch')
-rw-r--r--core/busybox/patches/fsck-resolve-uuid.patch56
1 files changed, 56 insertions, 0 deletions
diff --git a/core/busybox/patches/fsck-resolve-uuid.patch b/core/busybox/patches/fsck-resolve-uuid.patch
new file mode 100644
index 00000000..fd2503e7
--- /dev/null
+++ b/core/busybox/patches/fsck-resolve-uuid.patch
@@ -0,0 +1,56 @@
+From 2e673aac06d661038001286fd389d1b45c511c66 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Tue, 28 Nov 2017 13:23:17 +0100
+Subject: [PATCH] fsck: resolve LABEL=.../UUID=... spec to device
+
+---
+ e2fsprogs/fsck.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/e2fsprogs/fsck.c b/e2fsprogs/fsck.c
+index f5aa3dbe4..e2edc9747 100644
+--- a/e2fsprogs/fsck.c
++++ b/e2fsprogs/fsck.c
+@@ -60,6 +60,7 @@
+ //usage: "\n -t TYPE List of filesystem types to check"
+
+ #include "libbb.h"
++#include "volume_id.h"
+ #include "common_bufsiz.h"
+
+ /* "progress indicator" code is somewhat buggy and ext[23] specific.
+@@ -524,12 +525,13 @@ static int wait_many(int flags)
+ * Execute a particular fsck program, and link it into the list of
+ * child processes we are waiting for.
+ */
+-static void execute(const char *type, const char *device,
++static void execute(const char *type, const char *spec,
+ const char *mntpt /*, int interactive */)
+ {
+ int i;
+ struct fsck_instance *inst;
+ pid_t pid;
++ char *device = (char *)spec;
+
+ G.args[0] = xasprintf("fsck.%s", type);
+
+@@ -544,7 +546,8 @@ static void execute(const char *type, const char *device,
+ }
+ #endif
+
+- G.args[G.num_args - 2] = (char*)device;
++ resolve_mount_spec(&device);
++ G.args[G.num_args - 2] = device;
+ /* G.args[G.num_args - 1] = NULL; - already is */
+
+ if (G.verbose || G.noexecute) {
+@@ -973,9 +976,6 @@ int fsck_main(int argc UNUSED_PARAM, char **argv)
+
+ /* "/dev/blk" or "/path" or "UUID=xxx" or "LABEL=xxx" */
+ if ((arg[0] == '/' && !opts_for_fsck) || strchr(arg, '=')) {
+-// FIXME: must check that arg is a blkdev, or resolve
+-// "/path", "UUID=xxx" or "LABEL=xxx" into block device name
+-// ("UUID=xxx"/"LABEL=xxx" can probably shifted to fsck.auto duties)
+ devices = xrealloc_vector(devices, 2, num_devices);
+ devices[num_devices++] = arg;
+ continue;