]> wimlib.net Git - wimlib/blobdiff - src/wimlib_internal.h
Get imagex extract --to-stdout working
[wimlib] / src / wimlib_internal.h
index d0b2f89cd2fc8035a38a39afba7b1f6736d70130..1ddec8e3c84f38fcfdc36c562131fa95eecf50b0 100644 (file)
@@ -280,18 +280,14 @@ struct wim_image_metadata {
 /* The opaque structure exposed to the wimlib API. */
 struct WIMStruct {
 
-       /* A pointer to the file indicated by @filename, opened for reading. */
-       FILE *fp;
+       /* File descriptor for the WIM file, opened for reading, or -1 if it has
+        * not been opened or there is no associated file backing it yet. */
+       int in_fd;
 
-#if defined(WITH_FUSE) || defined(ENABLE_MULTITHREADED_COMPRESSION)
-       /* Extra file pointers to be used by concurrent readers */
-       FILE **fp_tab;
-       size_t num_allocated_fps;
-       pthread_mutex_t fp_tab_mutex;
-#endif
-
-       /* FILE pointer for the WIM file (if any) currently being written. */
-       FILE *out_fp;
+       /* File descriptor, opened either for writing only or for
+        * reading+writing, for the WIM file (if any) currently being written.
+        * */
+       int out_fd;
 
        /* The name of the WIM file (if any) that has been opened. */
        tchar *filename;
@@ -497,10 +493,11 @@ dentry_tree_fix_inodes(struct wim_dentry *root, struct list_head *inode_list);
 /* header.c */
 
 extern int
-read_header(FILE *fp, struct wim_header *hdr, int split_ok);
+read_header(const tchar *filename, int in_fd, struct wim_header *hdr,
+           int split_ok);
 
 extern int
-write_header(const struct wim_header *hdr, FILE *out);
+write_header(const struct wim_header *hdr, int out_fd);
 
 extern int
 init_header(struct wim_header *hdr, int ctype);
@@ -512,7 +509,8 @@ init_header(struct wim_header *hdr, int ctype);
 #define WIM_INTEGRITY_NONEXISTENT -2
 
 extern int
-write_integrity_table(FILE *out, struct resource_entry *integrity_res_entry,
+write_integrity_table(int fd,
+                     struct resource_entry *integrity_res_entry,
                      off_t new_lookup_table_end,
                      off_t old_lookup_table_end,
                      wimlib_progress_func_t progress_func);
@@ -541,6 +539,9 @@ write_metadata_resource(WIMStruct *w);
 struct apply_args {
        WIMStruct *w;
        const tchar *target;
+       unsigned target_nchars;
+       unsigned wim_source_path_nchars;
+       struct wim_dentry *extract_root;
        tchar *target_realpath;
        unsigned target_realpath_len;
        int extract_flags;
@@ -561,6 +562,7 @@ struct apply_args {
                        unsigned long num_set_sd_access_denied;
                        unsigned vol_flags;
                        unsigned long num_hard_links_failed;
+                       unsigned long num_soft_links_failed;
                        bool have_vol_flags;
                };
        #else
@@ -672,7 +674,6 @@ capture_fixup_absolute_symlink(tchar *dest,
 /* resource.c */
 
 #define WIMLIB_RESOURCE_FLAG_RAW               0x1
-#define WIMLIB_RESOURCE_FLAG_THREADSAFE_READ   0x2
 #define WIMLIB_RESOURCE_FLAG_RECOMPRESS                0x4
 
 extern int
@@ -686,19 +687,14 @@ get_resource_entry(const void *p, struct resource_entry *entry);
 extern void *
 put_resource_entry(void *p, const struct resource_entry *entry);
 
-extern int
-read_uncompressed_resource(FILE *fp, u64 offset, u64 size, void *buf);
-
 extern int
 read_partial_wim_resource_into_buf(const struct wim_lookup_table_entry *lte,
-                                  size_t size, u64 offset, void *buf,
-                                  bool threadsafe);
+                                  size_t size, u64 offset, void *buf);
 extern int
-read_full_resource_into_buf(const struct wim_lookup_table_entry *lte,
-                           void *buf, bool thread_safe);
+read_full_resource_into_buf(const struct wim_lookup_table_entry *lte, void *buf);
 
 extern int
-write_wim_resource(struct wim_lookup_table_entry *lte, FILE *out_fp,
+write_wim_resource(struct wim_lookup_table_entry *lte, int out_fd,
                   int out_ctype, struct resource_entry *out_res_entry,
                   int flags);
 
@@ -772,6 +768,12 @@ new_image_metadata_array(unsigned num_images);
 extern int
 wim_checksum_unhashed_streams(WIMStruct *w);
 
+extern int
+reopen_wim(WIMStruct *w);
+
+extern int
+close_wim(WIMStruct *w);
+
 /* write.c */
 
 /* Internal use only */
@@ -799,10 +801,10 @@ finish_write(WIMStruct *w, int image, int write_flags,
 
 #if defined(HAVE_SYS_FILE_H) && defined(HAVE_FLOCK)
 extern int
-lock_wim(WIMStruct *w, FILE *fp);
+lock_wim(WIMStruct *w, int fd);
 #else
 static inline int
-lock_wim(WIMStruct *w, FILE *fp)
+lock_wim(WIMStruct *w, int fd)
 {
        return 0;
 }