diff options
author | Karel Zak | 2018-06-11 16:06:17 +0200 |
---|---|---|
committer | Karel Zak | 2018-06-11 16:06:17 +0200 |
commit | de7ccabdfd2cf63324c9abddbc23dd71d4edd6b5 (patch) | |
tree | 7dab8632410c10245f0060acb22967f26477acad /libmount | |
parent | umount: add support for namespaces (diff) | |
download | kernel-qcow2-util-linux-de7ccabdfd2cf63324c9abddbc23dd71d4edd6b5.tar.gz kernel-qcow2-util-linux-de7ccabdfd2cf63324c9abddbc23dd71d4edd6b5.tar.xz kernel-qcow2-util-linux-de7ccabdfd2cf63324c9abddbc23dd71d4edd6b5.zip |
libmount: make errno usable after mnt_context_set_target_ns()
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libmount')
-rw-r--r-- | libmount/src/context.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/libmount/src/context.c b/libmount/src/context.c index da315a1d2..fdaa233c1 100644 --- a/libmount/src/context.c +++ b/libmount/src/context.c @@ -2617,9 +2617,9 @@ static void close_ns(struct libmnt_ns *ns) */ int mnt_context_set_target_ns(struct libmnt_context *cxt, const char *path) { - int rc = 0; - + int errsv = 0; int tmp; + if (!cxt) return -EINVAL; @@ -2632,6 +2632,8 @@ int mnt_context_set_target_ns(struct libmnt_context *cxt, const char *path) return 0; } + errno = 0; + /* open original namespace */ if (cxt->ns_orig.fd == -1) { cxt->ns_orig.fd = open("/proc/self/ns/mnt", O_RDONLY | O_CLOEXEC); @@ -2649,7 +2651,7 @@ int mnt_context_set_target_ns(struct libmnt_context *cxt, const char *path) DBG(CXT, ul_debugobj(cxt, "Trying whether namespace is valid")); if (setns(tmp, CLONE_NEWNS) || setns(cxt->ns_orig.fd, CLONE_NEWNS)) { - rc = -errno; + errsv = errno; DBG(CXT, ul_debugobj(cxt, "setns(2) failed [errno=%d %m]", errno)); goto err; } @@ -2662,7 +2664,8 @@ int mnt_context_set_target_ns(struct libmnt_context *cxt, const char *path) return 0; err: close(tmp); - return rc; + errno = errsv; + return -errno; } /** |