X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fwimlib_internal.h;h=d9c7775647063c3e3732c71338bd66b302ca874d;hp=28edf93ff510f28ae52c0fd7f870b69174d1b0f2;hb=36011d478b941ecaffbbbe98ec82f83916908add;hpb=ef8f45b98b5c4db398321cd36d052ccbb9c3784a diff --git a/src/wimlib_internal.h b/src/wimlib_internal.h index 28edf93f..d9c77756 100644 --- a/src/wimlib_internal.h +++ b/src/wimlib_internal.h @@ -31,7 +31,10 @@ struct stat; +#ifndef WIM_HASH_SIZE #define WIM_HASH_SIZE 20 +#endif + #define WIM_MAGIC_LEN 8 #define WIM_GID_LEN 16 #define WIM_UNUSED_LEN 60 @@ -44,8 +47,8 @@ struct stat; * of this size. */ #define WIM_CHUNK_SIZE 32768 -/* Version of the WIM file. I don't know if there has ever been a different - * version or not. */ +/* Version of the WIM file. There is an older version, but we don't support it + * yet. The differences between the versions are undocumented. */ #define WIM_VERSION 0x10d00 enum wim_integrity_status { @@ -205,6 +208,9 @@ struct wim_security_data { u32 refcnt; } WIMSecurityData; +struct link_group_table; + + /* Metadata resource for an image. */ struct image_metadata { /* Pointer to the root dentry for the image. */ @@ -217,6 +223,9 @@ struct image_metadata { * resource. */ struct lookup_table_entry *metadata_lte; + /* Hard link group table */ + struct link_group_table *lgt; + /* True if the filesystem of the image has been modified. If this is * the case, the memory for the filesystem is not freed when switching * to a different WIM image. */ @@ -317,6 +326,14 @@ static inline void print_hash(const u8 hash[]) print_byte_field(hash, WIM_HASH_SIZE); } +/* hardlink.c */ + +struct link_group_table *new_link_group_table(u64 capacity); +int link_group_table_insert(struct dentry *dentry, + struct link_group_table *table); +void free_link_group_table(struct link_group_table *table); +u64 assign_link_groups(struct link_group_table *table); + /* header.c */ extern int read_header(FILE *fp, struct wim_header *hdr, int split_ok); @@ -329,6 +346,9 @@ extern int write_integrity_table(FILE *out, u64 end_header_offset, int show_progress); extern int check_wim_integrity(WIMStruct *w, int show_progress, int *status); +/* modify.c */ +extern void destroy_image_metadata(struct image_metadata *imd, + struct lookup_table *lt); /* resource.c */ extern const u8 *get_resource_entry(const u8 *p, struct resource_entry *entry); @@ -367,7 +387,7 @@ static inline int read_full_resource(FILE *fp, u64 resource_size, resource_original_size, 0, contents_ret); } -extern int write_file_resource(struct dentry *dentry, void *wim_p); +extern int write_dentry_resources(struct dentry *dentry, void *wim_p); extern int copy_resource(struct lookup_table_entry *lte, void *w); extern int copy_between_files(FILE *in, off_t in_offset, FILE *out, size_t len); extern int write_resource_from_memory(const u8 resource[], int out_ctype, @@ -375,6 +395,7 @@ extern int write_resource_from_memory(const u8 resource[], int out_ctype, u64 *resource_size_ret); extern int write_metadata_resource(WIMStruct *w); + /* security.c */ int read_security_data(const u8 metadata_resource[], u64 metadata_resource_len, struct wim_security_data **sd_p); @@ -383,6 +404,15 @@ void print_security_data(const struct wim_security_data *sd); u8 *write_security_data(const struct wim_security_data *sd, u8 *p); void free_security_data(struct wim_security_data *sd); +/* symlink.c */ +ssize_t dentry_readlink(const struct dentry *dentry, char *buf, size_t buf_len, + const WIMStruct *w); +extern void *make_symlink_reparse_data_buf(const char *symlink_target, + size_t *len_ret); +extern int dentry_set_symlink(struct dentry *dentry, + const char *target, + struct lookup_table *lookup_table); + /* wim.c */ extern WIMStruct *new_wim_struct(); extern int wimlib_select_image(WIMStruct *w, int image);