diff options
author | Qu Wenruo <quwenruo@cn.fujitsu.com> | 2014-02-10 15:28:28 +0800 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2014-03-21 06:23:12 -0700 |
commit | 14ef4f569572ad34254186f1a503c39b735cc167 (patch) | |
tree | a14bb06a2be13be0747761f87fc3cc9b67256c4c /cmds-send.c | |
parent | e7839bced72b27bddefe3dbc8ffbcd640edae509 (diff) |
btrfs-progs: move find_mount_root to utils.[ch]
Move find_mount_root to utils.[ch] for general use.
Signed-off-by: Qu Wenruo <quwenruo@cn.fuijitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to 'cmds-send.c')
-rw-r--r-- | cmds-send.c | 49 |
1 files changed, 1 insertions, 48 deletions
diff --git a/cmds-send.c b/cmds-send.c index fc9a01ee..9d49ce9f 100644 --- a/cmds-send.c +++ b/cmds-send.c @@ -39,6 +39,7 @@ #include "ioctl.h" #include "commands.h" #include "list.h" +#include "utils.h" #include "send.h" #include "send-utils.h" @@ -57,54 +58,6 @@ struct btrfs_send { struct subvol_uuid_search sus; }; -int find_mount_root(const char *path, char **mount_root) -{ - FILE *mnttab; - int fd; - struct mntent *ent; - int len; - int ret; - int longest_matchlen = 0; - char *longest_match = NULL; - - fd = open(path, O_RDONLY | O_NOATIME); - if (fd < 0) - return -errno; - close(fd); - - mnttab = setmntent("/proc/self/mounts", "r"); - if (!mnttab) - return -errno; - - while ((ent = getmntent(mnttab))) { - len = strlen(ent->mnt_dir); - if (strncmp(ent->mnt_dir, path, len) == 0) { - /* match found */ - if (longest_matchlen < len) { - free(longest_match); - longest_matchlen = len; - longest_match = strdup(ent->mnt_dir); - } - } - } - endmntent(mnttab); - - if (!longest_match) { - fprintf(stderr, - "ERROR: Failed to find mount root for path %s.\n", - path); - return -ENOENT; - } - - ret = 0; - *mount_root = realpath(longest_match, NULL); - if (!*mount_root) - ret = -errno; - - free(longest_match); - return ret; -} - static int get_root_id(struct btrfs_send *s, const char *path, u64 *root_id) { struct subvol_info *si; |