* a LZ77-based algorithm. */
#define WIM_HDR_FLAG_COMPRESS_LZX 0x00040000
+typedef struct _ntfs_volume ntfs_volume;
/* Structure for security data. Each image in the WIM file has its own security
* data. */
typedef struct WIMStruct {
/* A pointer to the file indicated by @filename, opened for reading. */
- FILE *fp;
+ FILE *fp;
/* FILE pointer for the WIM file that is being written. */
FILE *out_fp;
/* The name of the WIM file that has been opened. */
- char *filename;
+ char *filename;
/* The lookup table for the WIM file. */
struct lookup_table *lookup_table;
/* Pointer to the XML data read from the WIM file. */
- u8 *xml_data;
+ u8 *xml_data;
/* Information retrieved from the XML data, arranged
* in an orderly manner. */
union {
int extract_flags;
int add_flags;
+ int write_flags;
+ bool write_metadata;
+ ntfs_volume *ntfs_vol;
};
/* The currently selected image, indexed starting at 1. If not 0,
* subtract 1 from this to get the index of the current image in the
* image_metadata array. */
int current_image;
-
- bool write_metadata;
} WIMStruct;
return w->image_metadata[w->current_image - 1].root_dentry;
}
-static inline struct dentry **wim_root_dentry_p(WIMStruct *w)
+static inline struct wim_security_data *
+wim_security_data(WIMStruct *w)
{
- return &w->image_metadata[w->current_image - 1].root_dentry;
+ return w->image_metadata[w->current_image - 1].security_data;
}
-
-static inline struct wim_security_data *wim_security_data(WIMStruct *w)
+static inline const struct wim_security_data *
+wim_const_security_data(const WIMStruct *w)
{
return w->image_metadata[w->current_image - 1].security_data;
}
return (entry->flags & WIM_RESHDR_FLAG_COMPRESSED);
}
-static inline struct image_metadata *wim_get_current_image_metadata(WIMStruct *w)
+static inline struct image_metadata *
+wim_get_current_image_metadata(WIMStruct *w)
{
return &w->image_metadata[w->current_image - 1];
}
/* modify.c */
extern void destroy_image_metadata(struct image_metadata *imd,
struct lookup_table *lt);
+extern int do_add_image(WIMStruct *w, const char *dir, const char *name,
+ const char *description, const char *flags_element,
+ int flags,
+ int (*capture_tree)(struct dentry *, const char *,
+ struct lookup_table *,
+ struct wim_security_data *, int, void *),
+ void *extra_arg);
/* resource.c */
extern const u8 *get_resource_entry(const u8 *p, struct resource_entry *entry);
extern int read_uncompressed_resource(FILE *fp, u64 offset, u64 size, u8 buf[]);
extern int read_wim_resource(const struct lookup_table_entry *lte, u8 buf[],
- size_t size, u64 offset);
+ size_t size, u64 offset, bool raw);
extern int read_full_wim_resource(const struct lookup_table_entry *lte, u8 buf[]);