From fa7f378bf627ddcfd7a93a000149e4d8c3810bf5 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Tue, 30 Apr 2019 01:24:16 +0200 Subject: Initial commit Signed-off-by: David Oberhollenzer --- include/fstree.h | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 include/fstree.h (limited to 'include/fstree.h') diff --git a/include/fstree.h b/include/fstree.h new file mode 100644 index 0000000..68bbc7d --- /dev/null +++ b/include/fstree.h @@ -0,0 +1,78 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +#ifndef FSTREE_H +#define FSTREE_H + +#include +#include +#include +#include +#include + +typedef struct tree_node_t tree_node_t; +typedef struct file_info_t file_info_t; +typedef struct dir_info_t dir_info_t; +typedef struct fstree_t fstree_t; + +struct file_info_t { + char *input_file; + file_info_t *frag_next; + uint64_t size; + uint64_t startblock; + uint32_t fragment; + uint32_t fragment_offset; + uint32_t blocksizes[]; +}; + +struct dir_info_t { + tree_node_t *children; + uint64_t size; + uint64_t start_block; + uint32_t block_offset; + bool created_implicitly; +}; + +struct tree_node_t { + tree_node_t *next; + char *name; + uint32_t uid; + uint32_t gid; + uint16_t mode; + + union { + dir_info_t *dir; + file_info_t *file; + char *slink_target; + uint64_t devno; + } data; + + uint8_t payload[]; +}; + +struct fstree_t { + uint32_t default_uid; + uint32_t default_gid; + uint32_t default_mode; + uint32_t default_mtime; + size_t block_size; + + tree_node_t *root; +}; + +int fstree_init(fstree_t *fs, size_t block_size, uint32_t mtime, + uint16_t default_mode, uint32_t default_uid, + uint32_t default_gid); + +void fstree_cleanup(fstree_t *fs); + +tree_node_t *fstree_add(fstree_t *fs, const char *path, uint16_t mode, + uint32_t uid, uint32_t gid, size_t extra_len); + +tree_node_t *fstree_add_file(fstree_t *fs, const char *path, uint16_t mode, + uint32_t uid, uint32_t gid, uint64_t filesz, + const char *input); + +int fstree_from_file(fstree_t *fs, const char *filename); + +void fstree_sort(fstree_t *fs); + +#endif /* FSTREE_H */ -- cgit v1.2.3