summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2017-07-10 19:25:27 -0400
committerGitHub <noreply@github.com>2017-07-10 19:25:27 -0400
commit3f7a2973a51ed29d401770b982d58d4d91e10dad (patch)
treeff338f884b9483a00e393ff92277d8e4181beaad
parentbe7cdd8ec992b354a98b89e5928aad1b574d01d5 (diff)
parent514368adfbc9104c6226e883b8a68b451780ed23 (diff)
downloadsystemd-3f7a2973a51ed29d401770b982d58d4d91e10dad.tar.gz
Merge pull request #6322 from poettering/mount-mini-fixes
a bunch of mini fixes for mount-tool.c
-rw-r--r--src/mount/mount-tool.c37
1 files changed, 19 insertions, 18 deletions
diff --git a/src/mount/mount-tool.c b/src/mount/mount-tool.c
index 0ab06ac3b9..ed6578d540 100644
--- a/src/mount/mount-tool.c
+++ b/src/mount/mount-tool.c
@@ -736,13 +736,13 @@ static int find_mount_points(const char *what, char ***list) {
if (!GREEDY_REALLOC(l, bufsize, n + 2))
return log_oom();
- l[n] = strdup(where);
- if (!l[n])
- return log_oom();
-
- n++;
+ l[n++] = where;
+ where = NULL;
}
+ if (!GREEDY_REALLOC(l, bufsize, n + 1))
+ return log_oom();
+
l[n] = NULL;
*list = l;
l = NULL; /* avoid freeing */
@@ -759,11 +759,8 @@ static int find_loop_device(const char *backing_file, char **loop_dev) {
assert(loop_dev);
d = opendir("/sys/devices/virtual/block");
- if (!d) {
- if (errno == ENOENT)
- return -ENOENT;
- return log_error_errno(errno, "Can't open directory /sys/devices/virtual/block: %m");
- }
+ if (!d)
+ return -errno;
FOREACH_DIRENT(de, d, return -errno) {
_cleanup_free_ char *sys = NULL, *fname = NULL;
@@ -779,24 +776,26 @@ static int find_loop_device(const char *backing_file, char **loop_dev) {
sys = strjoin("/sys/devices/virtual/block/", de->d_name, "/loop/backing_file");
if (!sys)
- return log_oom();
+ return -ENOMEM;
r = read_one_line_file(sys, &fname);
- if (r < 0)
+ if (r < 0) {
+ log_debug_errno(r, "Failed to read %s, ignoring: %m", sys);
continue;
+ }
if (files_same(fname, backing_file, 0) <= 0)
continue;
l = strjoin("/dev/", de->d_name);
if (!l)
- return log_oom();
+ return -ENOMEM;
break;
}
if (!l)
- return -ENOENT;
+ return -ENXIO;
*loop_dev = l;
l = NULL; /* avoid freeing */
@@ -955,7 +954,7 @@ static int umount_loop(sd_bus *bus, const char *backing_file) {
r = find_loop_device(backing_file, &loop_dev);
if (r < 0)
- return log_error_errno(r, r == -ENOENT ? "File %s is not mounted." : "Can't get loop device for %s: %m", backing_file);
+ return log_error_errno(r, r == -ENXIO ? "File %s is not mounted." : "Can't get loop device for %s: %m", backing_file);
return umount_by_device(bus, loop_dev);
}
@@ -1230,10 +1229,10 @@ static int discover_loop_backing_file(void) {
int r;
r = find_loop_device(arg_mount_what, &loop_dev);
- if (r < 0 && r != -ENOENT)
+ if (r < 0 && r != -ENXIO)
return log_error_errno(errno, "Can't get loop device for %s: %m", arg_mount_what);
- if (r == -ENOENT) {
+ if (r == -ENXIO) {
_cleanup_free_ char *escaped = NULL;
if (arg_mount_where)
@@ -1242,8 +1241,10 @@ static int discover_loop_backing_file(void) {
escaped = xescape(basename(arg_mount_what), "\\");
if (!escaped)
return log_oom();
- if (!filename_is_valid(escaped))
+ if (!filename_is_valid(escaped)) {
+ log_error("Escaped name %s is not a valid filename.", escaped);
return -EINVAL;
+ }
arg_mount_where = strjoin("/run/media/system/", escaped);
if (!arg_mount_where)