aboutsummaryrefslogtreecommitdiff
path: root/include/io/dir_iterator.h
diff options
context:
space:
mode:
authorDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2023-05-13 17:18:43 +0200
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2023-05-13 17:18:43 +0200
commite501c9a4bc230dab034571c2078a12a8a856c67a (patch)
tree028c149597a194ec2220a60dc12db90a62c64669 /include/io/dir_iterator.h
parent7ce4b36d517ac5fade36240d293ff784ef6a9305 (diff)
Move directory iterator from libutil to libio
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'include/io/dir_iterator.h')
-rw-r--r--include/io/dir_iterator.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/include/io/dir_iterator.h b/include/io/dir_iterator.h
new file mode 100644
index 0000000..7080d65
--- /dev/null
+++ b/include/io/dir_iterator.h
@@ -0,0 +1,47 @@
+/* SPDX-License-Identifier: LGPL-3.0-or-later */
+/*
+ * dir_iterator.h
+ *
+ * Copyright (C) 2023 David Oberhollenzer <goliath@infraroot.at>
+ */
+#ifndef IO_DIR_ITERATOR_H
+#define IO_DIR_ITERATOR_H
+
+#include "sqfs/predef.h"
+
+typedef struct {
+ sqfs_s64 mtime;
+ sqfs_u64 dev;
+ sqfs_u64 rdev;
+ sqfs_u32 uid;
+ sqfs_u32 gid;
+ sqfs_u16 mode;
+
+ char name[];
+} dir_entry_t;
+
+typedef struct dir_iterator_t {
+ sqfs_object_t obj;
+
+ sqfs_u64 dev;
+
+ int (*next)(struct dir_iterator_t *it,
+ dir_entry_t **out);
+
+ int (*read_link)(struct dir_iterator_t *it, char **out);
+
+ int (*open_subdir)(struct dir_iterator_t *it,
+ struct dir_iterator_t **out);
+} dir_iterator_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+dir_iterator_t *dir_iterator_create(const char *path);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IO_DIR_ITERATOR_H */