diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2021-11-01 11:51:49 +0100 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2022-03-30 22:31:30 +0200 |
commit | a41a57834fc70541ada5579e2d74114f7113e9bc (patch) | |
tree | 0488f919013b472bb25cb678388ee911a380a0f1 /include/fstree.h | |
parent | 27dfe8bf61a40e6b1a7f736119bf21037eaea2b9 (diff) |
Add sort-file implementation
A `flags` field and `priority` are added to all file information
structs. A news fstree function is introduced for parsing a "sort-file".
Each line in the file is space separated, and has the following format:
priority [flags] filename
Priority is a 64 bit number, flags are optional and filename can be put
in quotes if it is supposed to start or end with spaces. Single line
comments can be used.
The flags can be used to set block-processor flags (e.g. don't fragment,
or don't compress), as well as instructing the parser to use file
globbing to match the filename.
After parsing the file, the list of file info structure is sorted
according to the priority (default is 0) using a stable sort algorithm.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'include/fstree.h')
-rw-r--r-- | include/fstree.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/include/fstree.h b/include/fstree.h index 5bdfc7a..9868e8e 100644 --- a/include/fstree.h +++ b/include/fstree.h @@ -15,6 +15,7 @@ #include <stdio.h> #include "sqfs/predef.h" +#include "fstream.h" #include "compat.h" enum { @@ -41,6 +42,9 @@ typedef struct file_info_t file_info_t; typedef struct dir_info_t dir_info_t; typedef struct fstree_t fstree_t; +#define container_of(ptr, type, member) \ + ((type *)((char *)ptr - offsetof(type, member))) + /* Optionally used by fstree_from_dir and fstree_from_subdir to execute custom actions for each discovered node. @@ -59,6 +63,11 @@ struct file_info_t { char *input_file; sqfs_inode_generic_t *inode; + + /* used by sort file processing */ + sqfs_s64 priority; + int flags; + bool already_matched; }; /* Additional meta data stored in a tree_node_t for directories */ @@ -274,4 +283,6 @@ int fstree_from_subdir(fstree_t *fs, tree_node_t *root, const char *path, const char *subdir, scan_node_callback cb, void *user, unsigned int flags); +int fstree_sort_files(fstree_t *fs, istream_t *sortfile); + #endif /* FSTREE_H */ |