This commit is just cleanup to keep internal API consistent.
Signed-off-by: Karel Zak <kzak@redhat.com>
if (!cxt)
return -EINVAL;
- reset_syscall_status(cxt);
+ mnt_context_syscall_reset_status(cxt);
cxt->syscall_status = 1; /* means not called yet */
cxt->helper_exec_status = 1;
*
* The @status should be 0 on success, or negative number on error (-errno).
*
- * This function should only be used if the [u]mount(2) syscall is NOT called by
- * libmount code.
+ * This function is intended for cases where mount/umount is called externally,
+ * rather than by libmount.
*
* Returns: 0 or negative number in case of error.
*/
return 0;
}
+/* Use this for syscalls called from libmount */
+void mnt_context_syscall_save_status( struct libmnt_context *cxt,
+ const char *syscallname,
+ int success)
+{
+ if (!success) {
+ DBG(CXT, ul_debug("syscall '%s' [failed: %m]", syscallname));
+ cxt->syscall_status = -errno;
+ cxt->syscall_name = syscallname;
+ } else {
+ DBG(CXT, ul_debug("syscall '%s' [success]", syscallname));
+ cxt->syscall_status = 0;
+ }
+}
+
+void mnt_context_syscall_reset_status(struct libmnt_context *cxt)
+{
+ DBG(CXT, ul_debug("reset syscall status"));
+ cxt->syscall_status = 0;
+ cxt->syscall_name = NULL;
+
+ free(cxt->syscall_errmsg);
+ cxt->syscall_errmsg = NULL;
+}
+
/**
* mnt_context_strerror
* @cxt: context
{
struct libmnt_sysapi *api;
- set_syscall_status(cxt, name, x);
+ mnt_context_syscall_save_status(cxt, name, x);
if (!x) {
api = get_sysapi(cxt);
/* we need to recover from this error, so hook_mount_legacy.c
* can try to continue */
DBG(HOOK, ul_debugobj(hs, "failed to init new API"));
- reset_syscall_status(cxt);
+ mnt_context_syscall_reset_status(cxt);
hookset_deinit(cxt, hs);
return 1;
}
DBG(HOOK, ul_debug("attach subdir %s", subdir));
fd = open_tree(api->fd_tree, subdir,
OPEN_TREE_CLOEXEC | OPEN_TREE_CLONE);
- set_syscall_status(cxt, "open_tree", fd >= 0);
+ mnt_context_syscall_save_status(cxt, "open_tree", fd >= 0);
if (fd < 0)
rc = -errno;
setns(hsd->old_ns_fd, CLONE_NEWNS);
rc = move_mount(fd, "", AT_FDCWD, target, MOVE_MOUNT_F_EMPTY_PATH);
- set_syscall_status(cxt, "move_mount", rc == 0);
+ mnt_context_syscall_save_status(cxt, "move_mount", rc == 0);
if (rc)
rc = -errno;
/* Classic mount(2) based way */
DBG(HOOK, ul_debug("mount subdir %s to %s", src, target));
rc = mount(src, target, NULL, MS_BIND, NULL);
-
- set_syscall_status(cxt, "mount", rc == 0);
+ mnt_context_syscall_save_status(cxt, "mount", rc == 0);
if (rc)
rc = -errno;
free(src);
if (!rc) {
DBG(HOOK, ul_debug("umount old root %s", root));
rc = umount(root);
- set_syscall_status(cxt, "umount", rc == 0);
+ mnt_context_syscall_save_status(cxt, "umount", rc == 0);
if (rc)
rc = -errno;
hsd->tmp_umounted = 1;
/* Flags usable with MS_BIND|MS_REMOUNT */
#define MNT_BIND_SETTABLE (MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_NOATIME|MS_NODIRATIME|MS_RELATIME|MS_RDONLY|MS_NOSYMFOLLOW)
-static inline void set_syscall_status(struct libmnt_context *cxt, const char *name, int x)
-{
- if (!x) {
- DBG(CXT, ul_debug("syscall '%s' [%m]", name));
- cxt->syscall_status = -errno;
- cxt->syscall_name = name;
- } else {
- DBG(CXT, ul_debug("syscall '%s' [success]", name));
- cxt->syscall_status = 0;
- }
-}
-
-static inline void reset_syscall_status(struct libmnt_context *cxt)
-{
- DBG(CXT, ul_debug("reset syscall status"));
- cxt->syscall_status = 0;
- cxt->syscall_name = NULL;
-
- free(cxt->syscall_errmsg);
- cxt->syscall_errmsg = NULL;
-}
/* optmap.c */
extern const struct libmnt_optmap *mnt_optmap_get_entry(
__attribute__((nonnull(1)));
/* context.c */
+extern void mnt_context_syscall_save_status(struct libmnt_context *cxt,
+ const char *syscallname, int success);
+extern void mnt_context_syscall_reset_status(struct libmnt_context *cxt);
+
extern struct libmnt_context *mnt_copy_context(struct libmnt_context *o);
extern int mnt_context_utab_writable(struct libmnt_context *cxt);
extern const char *mnt_context_get_writable_tabpath(struct libmnt_context *cxt);