summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2020-12-10 16:00:44 +0100
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2020-12-10 16:00:44 +0100
commitf138e4a24919682cf477cf93ae47b9a89bb5a3f0 (patch)
tree300147af5d6d6c9a2e0cf9b49674ec9edf58f0fb
parentca61276fe9676670afe657c863257c01274c111a (diff)
Move fstree dirscan code back to libfstree
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
-rw-r--r--bin/gensquashfs/Makemodule.am2
-rw-r--r--bin/gensquashfs/dirscan_xattr.c12
-rw-r--r--bin/gensquashfs/mkfs.c2
-rw-r--r--bin/gensquashfs/mkfs.h15
-rw-r--r--bin/gensquashfs/options.c2
-rw-r--r--include/fstree.h13
-rw-r--r--lib/fstree/Makemodule.am2
-rw-r--r--lib/fstree/fstree_from_dir.c (renamed from bin/gensquashfs/dirscan.c)10
8 files changed, 34 insertions, 24 deletions
diff --git a/bin/gensquashfs/Makemodule.am b/bin/gensquashfs/Makemodule.am
index e030009..11a3535 100644
--- a/bin/gensquashfs/Makemodule.am
+++ b/bin/gensquashfs/Makemodule.am
@@ -1,6 +1,6 @@
gensquashfs_SOURCES = bin/gensquashfs/mkfs.c bin/gensquashfs/mkfs.h
gensquashfs_SOURCES += bin/gensquashfs/options.c bin/gensquashfs/selinux.c
-gensquashfs_SOURCES += bin/gensquashfs/dirscan.c bin/gensquashfs/dirscan_xattr.c
+gensquashfs_SOURCES += bin/gensquashfs/dirscan_xattr.c
gensquashfs_LDADD = libcommon.a libsquashfs.la libfstree.a libfstream.a
gensquashfs_LDADD += libcompat.a $(LZO_LIBS) $(PTHREAD_LIBS)
gensquashfs_CPPFLAGS = $(AM_CPPFLAGS)
diff --git a/bin/gensquashfs/dirscan_xattr.c b/bin/gensquashfs/dirscan_xattr.c
index 5ed3c9c..65f7f5c 100644
--- a/bin/gensquashfs/dirscan_xattr.c
+++ b/bin/gensquashfs/dirscan_xattr.c
@@ -122,7 +122,7 @@ fail:
#endif
static int xattr_xcan_dfs(const char *path_prefix, void *selinux_handle,
- sqfs_xattr_writer_t *xwr, unsigned int flags,
+ sqfs_xattr_writer_t *xwr, bool scan_xattr,
tree_node_t *node)
{
char *path;
@@ -136,7 +136,7 @@ static int xattr_xcan_dfs(const char *path_prefix, void *selinux_handle,
}
#ifdef HAVE_SYS_XATTR_H
- if (flags & DIR_SCAN_READ_XATTR) {
+ if (scan_xattr) {
path = get_full_path(path_prefix, node);
if (path == NULL)
return -1;
@@ -176,7 +176,7 @@ static int xattr_xcan_dfs(const char *path_prefix, void *selinux_handle,
while (node != NULL) {
if (xattr_xcan_dfs(path_prefix, selinux_handle, xwr,
- flags, node)) {
+ scan_xattr, node)) {
return -1;
}
@@ -188,13 +188,13 @@ static int xattr_xcan_dfs(const char *path_prefix, void *selinux_handle,
}
int xattrs_from_dir(fstree_t *fs, const char *path, void *selinux_handle,
- sqfs_xattr_writer_t *xwr, unsigned int flags)
+ sqfs_xattr_writer_t *xwr, bool scan_xattr)
{
if (xwr == NULL)
return 0;
- if (selinux_handle == NULL && !(flags & DIR_SCAN_READ_XATTR))
+ if (selinux_handle == NULL && !scan_xattr)
return 0;
- return xattr_xcan_dfs(path, selinux_handle, xwr, flags, fs->root);
+ return xattr_xcan_dfs(path, selinux_handle, xwr, scan_xattr, fs->root);
}
diff --git a/bin/gensquashfs/mkfs.c b/bin/gensquashfs/mkfs.c
index ce23e6f..6f26d56 100644
--- a/bin/gensquashfs/mkfs.c
+++ b/bin/gensquashfs/mkfs.c
@@ -206,7 +206,7 @@ int main(int argc, char **argv)
if (opt.infile == NULL) {
if (xattrs_from_dir(&sqfs.fs, opt.packdir, sehnd,
- sqfs.xwr, opt.dirscan_flags)) {
+ sqfs.xwr, opt.scan_xattr)) {
goto out;
}
}
diff --git a/bin/gensquashfs/mkfs.h b/bin/gensquashfs/mkfs.h
index 6aa0c87..e1e4e1b 100644
--- a/bin/gensquashfs/mkfs.h
+++ b/bin/gensquashfs/mkfs.h
@@ -34,7 +34,6 @@
#include <stdlib.h>
#include <string.h>
#include <limits.h>
-#include <dirent.h>
#include <stdio.h>
#include <errno.h>
#include <ctype.h>
@@ -51,22 +50,14 @@ typedef struct {
unsigned int force_gid_value;
bool force_uid;
bool force_gid;
-} options_t;
-
-enum {
- DIR_SCAN_KEEP_TIME = 0x01,
-
- DIR_SCAN_ONE_FILESYSTEM = 0x02,
- DIR_SCAN_READ_XATTR = 0x04,
-};
+ bool scan_xattr;
+} options_t;
void process_command_line(options_t *opt, int argc, char **argv);
-int fstree_from_dir(fstree_t *fs, const char *path, unsigned int flags);
-
int xattrs_from_dir(fstree_t *fs, const char *path, void *selinux_handle,
- sqfs_xattr_writer_t *xwr, unsigned int flags);
+ sqfs_xattr_writer_t *xwr, bool scan_xattr);
void *selinux_open_context_file(const char *filename);
diff --git a/bin/gensquashfs/options.c b/bin/gensquashfs/options.c
index b432a46..9153265 100644
--- a/bin/gensquashfs/options.c
+++ b/bin/gensquashfs/options.c
@@ -245,7 +245,7 @@ void process_command_line(options_t *opt, int argc, char **argv)
break;
#ifdef HAVE_SYS_XATTR_H
case 'x':
- opt->dirscan_flags |= DIR_SCAN_READ_XATTR;
+ opt->scan_xattr = true;
break;
#endif
case 'o':
diff --git a/include/fstree.h b/include/fstree.h
index 884ff51..ac92daa 100644
--- a/include/fstree.h
+++ b/include/fstree.h
@@ -17,6 +17,12 @@
#include "sqfs/predef.h"
#include "compat.h"
+enum {
+ DIR_SCAN_KEEP_TIME = 0x01,
+
+ DIR_SCAN_ONE_FILESYSTEM = 0x02,
+};
+
#define FSTREE_MODE_HARD_LINK (0)
#define FSTREE_MODE_HARD_LINK_RESOLVED (1)
@@ -230,4 +236,11 @@ tree_node_t *fstree_add_hard_link(fstree_t *fs, const char *path,
*/
int fstree_resolve_hard_link(fstree_t *fs, tree_node_t *node);
+/*
+ Recursively scan a directory to build a file system tree.
+
+ Returns 0 on success, prints to stderr on failure.
+ */
+int fstree_from_dir(fstree_t *fs, const char *path, unsigned int flags);
+
#endif /* FSTREE_H */
diff --git a/lib/fstree/Makemodule.am b/lib/fstree/Makemodule.am
index 56394a6..97a2e6b 100644
--- a/lib/fstree/Makemodule.am
+++ b/lib/fstree/Makemodule.am
@@ -1,7 +1,7 @@
libfstree_a_SOURCES = lib/fstree/fstree.c lib/fstree/fstree_from_file.c
libfstree_a_SOURCES += lib/fstree/fstree_sort.c lib/fstree/hardlink.c
libfstree_a_SOURCES += lib/fstree/post_process.c lib/fstree/get_path.c
-libfstree_a_SOURCES += lib/fstree/mknode.c
+libfstree_a_SOURCES += lib/fstree/mknode.c lib/fstree/fstree_from_dir.c
libfstree_a_SOURCES += lib/fstree/add_by_path.c lib/fstree/get_by_path.c
libfstree_a_SOURCES += include/fstree.h lib/fstree/internal.h
libfstree_a_SOURCES += lib/fstree/source_date_epoch.c
diff --git a/bin/gensquashfs/dirscan.c b/lib/fstree/fstree_from_dir.c
index bb6d2c3..e61b706 100644
--- a/bin/gensquashfs/dirscan.c
+++ b/lib/fstree/fstree_from_dir.c
@@ -1,10 +1,16 @@
/* SPDX-License-Identifier: GPL-3.0-or-later */
/*
- * dirscan.c
+ * fstree_from_dir.c
*
* Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at>
*/
-#include "mkfs.h"
+#include "config.h"
+#include "fstree.h"
+
+#include <dirent.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
#ifdef _WIN32
int fstree_from_dir(fstree_t *fs, const char *path, unsigned int flags)