X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=include%2Fwimlib%2Finode.h;h=ed6f9de92ee1ea088e1052c3b5f6c78a0b0681dd;hp=fc8ddc27a2967ae5a69ab704b3066f42c873c16c;hb=f9894b7e0e2a2a46fffdf7274d8671fb00f98089;hpb=6460a27c606eed49e900c73a3316ac12d77a3a2e diff --git a/include/wimlib/inode.h b/include/wimlib/inode.h index fc8ddc27..ed6f9de9 100644 --- a/include/wimlib/inode.h +++ b/include/wimlib/inode.h @@ -10,6 +10,7 @@ struct avl_tree_node; struct blob_descriptor; struct blob_table; struct wim_dentry; +struct wim_inode_extra; struct wim_security_data; struct wimfs_fd; @@ -106,13 +107,13 @@ struct wim_inode { u32 i_attributes; /* Root of a balanced binary search tree storing the child directory - * entries of this inode, if any. Keyed by wim_dentry->file_name, case + * entries of this inode, if any. Keyed by wim_dentry->d_name, case * sensitively. If this inode is not a directory or if it has no * children then this will be an empty tree (NULL). */ struct avl_tree_node *i_children; /* Root of a balanced binary search tree storing the child directory - * entries of this inode, if any. Keyed by wim_dentry->file_name, case + * entries of this inode, if any. Keyed by wim_dentry->d_name, case * insensitively. If this inode is not a directory or if it has no * children then this will be an empty tree (NULL). */ struct avl_tree_node *i_children_ci; @@ -129,10 +130,8 @@ struct wim_inode { /* Number of dentries that are aliases for this inode. */ u32 i_nlink : 30; - /* Flag used to mark this inode as visited; this is used when visiting - * all the inodes in a dentry tree exactly once. It will be 0 by - * default and must be cleared following the tree traversal, even in - * error paths. */ + /* Flag used by some code to mark this inode as visited. It will be 0 + * by default, and it always must be cleared after use. */ u32 i_visited : 1; /* Cached value */ @@ -142,10 +141,7 @@ struct wim_inode { * dentry. This should be a series of tagged items, each of which * represents a bit of extra metadata, such as the file's object ID. * See tagged_items.c for more information. */ - void *i_extra; - - /* Size of @i_extra buffer in bytes. If 0, there is no extra data. */ - size_t i_extra_size; + struct wim_inode_extra *i_extra; /* Creation time, last access time, and last write time for this inode, * in 100-nanosecond intervals since 12:00 a.m UTC January 1, 1601. @@ -232,6 +228,12 @@ struct wim_inode { u32 i_next_stream_id; }; +/* Optional extra data for a WIM inode */ +struct wim_inode_extra { + size_t size; /* Size of the extra data in bytes */ + u8 data[]; /* The extra data */ +}; + /* * The available reparse tags are documented at * http://msdn.microsoft.com/en-us/library/dd541667(v=prot.10).aspx. @@ -271,13 +273,13 @@ new_inode(struct wim_dentry *dentry, bool set_timestamps); hlist_for_each_entry((dentry), &(inode)->i_alias_list, d_alias_node) /* Return an alias of the specified inode. */ -#define inode_first_dentry(inode) \ +#define inode_any_dentry(inode) \ hlist_entry(inode->i_alias_list.first, struct wim_dentry, d_alias_node) /* Return the full path of an alias of the specified inode, or NULL if a full * path could not be determined. */ -#define inode_first_full_path(inode) \ - dentry_full_path(inode_first_dentry(inode)) +#define inode_any_full_path(inode) \ + dentry_full_path(inode_any_dentry(inode)) extern void d_associate(struct wim_dentry *dentry, struct wim_inode *inode); @@ -359,8 +361,8 @@ inode_replace_stream_data(struct wim_inode *inode, struct blob_table *blob_table); extern bool -inode_add_stream_with_data(struct wim_inode *inode, int stream_type, - const utf16lechar *stream_name, +inode_add_stream_with_data(struct wim_inode *inode, + int stream_type, const utf16lechar *stream_name, const void *data, size_t size, struct blob_table *blob_table); @@ -397,8 +399,8 @@ extern bool inode_has_named_data_stream(const struct wim_inode *inode); extern int -inode_resolve_streams(struct wim_inode *inode, - struct blob_table *table, bool force); +inode_resolve_streams(struct wim_inode *inode, struct blob_table *table, + bool force); extern int blob_not_found_error(const struct wim_inode *inode, const u8 *hash);