From b54d026f982a9f6c62d3276908a3fbc3cc628a9d Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Sun, 11 Aug 2019 00:44:05 +0200 Subject: Add --one-file-system option to gensquashfs Signed-off-by: David Oberhollenzer --- lib/fstree/fstree_from_dir.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'lib/fstree/fstree_from_dir.c') diff --git a/lib/fstree/fstree_from_dir.c b/lib/fstree/fstree_from_dir.c index 0c56148..7301d91 100644 --- a/lib/fstree/fstree_from_dir.c +++ b/lib/fstree/fstree_from_dir.c @@ -52,7 +52,8 @@ fail: return NULL; } -static int populate_dir(fstree_t *fs, tree_node_t *root, unsigned int flags) +static int populate_dir(fstree_t *fs, tree_node_t *root, dev_t devstart, + unsigned int flags) { char *extra = NULL; struct dirent *ent; @@ -86,6 +87,9 @@ static int populate_dir(fstree_t *fs, tree_node_t *root, unsigned int flags) goto fail; } + if ((flags & DIR_SCAN_ONE_FILESYSTEM) && sb.st_dev != devstart) + continue; + if (S_ISLNK(sb.st_mode)) { extra = calloc(1, sb.st_size + 1); if (extra == NULL) @@ -122,7 +126,7 @@ static int populate_dir(fstree_t *fs, tree_node_t *root, unsigned int flags) if (pushd(n->name)) return -1; - if (populate_dir(fs, n, flags)) + if (populate_dir(fs, n, devstart, flags)) return -1; if (popd()) @@ -141,12 +145,18 @@ fail: int fstree_from_dir(fstree_t *fs, const char *path, unsigned int flags) { + struct stat sb; int ret; + if (stat(path, &sb)) { + perror(path); + return -1; + } + if (pushd(path)) return -1; - ret = populate_dir(fs, fs->root, flags); + ret = populate_dir(fs, fs->root, sb.st_dev, flags); if (popd()) ret = -1; -- cgit v1.2.3