*/
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;
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);
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;
}
return 0;
err:
close(tmp);
- return rc;
+ errno = errsv;
+ return -errno;
}
/**
append_option(cxt, "rbind");
break;
case 'N':
- {
- int tmp;
- if ((tmp = mnt_context_set_target_ns(cxt, optarg))) {
- errno = -tmp;
+ if (mnt_context_set_target_ns(cxt, optarg))
err(MNT_EX_SYSERR, _("failed to set target namespace"));
- }
break;
- }
case MOUNT_OPT_SHARED:
append_option(cxt, "shared");
propa = 1;
print_version();
break;
case 'N':
- {
- int tmp;
- if ((tmp = mnt_context_set_target_ns(cxt, optarg))) {
- errno = -tmp;
+ if (mnt_context_set_target_ns(cxt, optarg))
err(MNT_EX_SYSERR, _("failed to set target namespace"));
- }
- break;
+ break;
}
default:
errtryhelp(MNT_EX_USAGE);