struct blob_descriptor;
struct blob_table;
struct wim_dentry;
+struct wim_inode_extra;
struct wim_security_data;
struct wimfs_fd;
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;
/* 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 */
* 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.
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.
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);
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);
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);