]> wimlib.net Git - wimlib/blobdiff - include/wimlib.h
Initial support for resuming extraction from split pipable WIMs
[wimlib] / include / wimlib.h
index 8c293c8a81d42dbbd867f0b5e6b3878959843737..0c14941e80f935871d51852033d144d4191731d2 100644 (file)
@@ -327,9 +327,10 @@ enum wimlib_progress_msg {
         * ::wimlib_progress_info.integrity. */
        WIMLIB_PROGRESS_MSG_CALC_INTEGRITY,
 
-       /** A wimlib_join() operation is in progress.  @a info will point to
-        * ::wimlib_progress_info.join. */
-       WIMLIB_PROGRESS_MSG_JOIN_STREAMS,
+       /** Reserved.  (Previously used for WIMLIB_PROGRESS_MSG_JOIN_STREAMS,
+        * but in wimlib v1.5.0 this was removed to simplify the code and now
+        * you'll get ::WIMLIB_PROGRESS_MSG_WRITE_STREAMS messages instead.)  */
+       WIMLIB_PROGRESS_MSG_RESERVED,
 
        /** A wimlib_split() operation is in progress, and a new split part is
         * about to be started.  @a info will point to
@@ -371,6 +372,7 @@ union wimlib_progress_info {
                 * (The actual number of bytes will be less if the data is being
                 * written compressed.) */
                uint64_t total_bytes;
+
                /** Number of streams that are going to be written. */
                uint64_t total_streams;
 
@@ -384,7 +386,7 @@ union wimlib_progress_info {
                uint64_t completed_streams;
 
                /** Number of threads that are being used to compress resources
-                * (if applicable). */
+                * (if applicable).  */
                unsigned num_threads;
 
                /** The compression type being used to write the streams; either
@@ -393,8 +395,13 @@ union wimlib_progress_info {
                 * ::WIMLIB_COMPRESSION_TYPE_LZX. */
                int      compression_type;
 
-               /** Library internal use only. */
-               uint64_t _private;
+               /** Number of split WIM parts from which streams are being
+                * written (may be 0 if irrelevant).  */
+               unsigned total_parts;
+
+               /** Number of split WIM parts from which streams have been
+                * written (may be 0 if irrelevant).  */
+               unsigned completed_parts;
        } write_streams;
 
        /** Valid on messages ::WIMLIB_PROGRESS_MSG_SCAN_BEGIN and
@@ -518,25 +525,6 @@ union wimlib_progress_info {
                const wimlib_tchar *filename;
        } integrity;
 
-       /** Valid on messages ::WIMLIB_PROGRESS_MSG_JOIN_STREAMS. */
-       struct wimlib_progress_info_join {
-               /** Total number of bytes of compressed data contained in all
-                * the split WIM part's file and metadata resources. */
-               uint64_t total_bytes;
-
-               /** Number of bytes that have been copied to the joined WIM so
-                * far.  Will be 0 initially, and equal to @a total_bytes at the
-                * end. */
-               uint64_t completed_bytes;
-
-               /** Number of split WIM parts that have had all their file and
-                * metadata resources copied over to the joined WIM so far. */
-               unsigned completed_parts;
-
-               /** Number of split WIM parts. */
-               unsigned total_parts;
-       } join;
-
        /** Valid on messages ::WIMLIB_PROGRESS_MSG_SPLIT_BEGIN_PART and
         * ::WIMLIB_PROGRESS_MSG_SPLIT_END_PART. */
        struct wimlib_progress_info_split {
@@ -1060,6 +1048,9 @@ typedef int (*wimlib_iterate_lookup_table_callback_t)(const struct wimlib_resour
  * create symbolic links.  */
 #define WIMLIB_EXTRACT_FLAG_STRICT_SYMLINKS             0x00008000
 
+/** TODO */
+#define WIMLIB_EXTRACT_FLAG_RESUME                     0x00010000
+
 
 /******************************
  * WIMLIB_MOUNT_FLAG_*
@@ -1207,9 +1198,18 @@ typedef int (*wimlib_iterate_lookup_table_callback_t)(const struct wimlib_resour
  ******************************/
 
 /** Assume that strings are represented in UTF-8, even if this is not the
- * locale's character encoding. */
+ * locale's character encoding.  Not used on Windows.  */
 #define WIMLIB_INIT_FLAG_ASSUME_UTF8                   0x00000001
 
+/** Windows-only: do not attempt to acquire additional privileges (currently
+ * SeBackupPrivilege, SeRestorePrivilege, SeSecurityPrivilege, and
+ * SeTakeOwnershipPrivilege) when initializing the library.  This is intended
+ * for the case where the calling program manages these privileges itself.
+ * Note: no error is issued if privileges cannot be acquired, although related
+ * errors may be reported later, depending on if the operations performed
+ * actually require additional privileges or not.  */
+#define WIMLIB_INIT_FLAG_DONT_ACQUIRE_PRIVILEGES       0x00000002
+
 /** Specification of an update to perform on a WIM image. */
 struct wimlib_update_command {
 
@@ -1847,10 +1847,9 @@ wimlib_extract_files(WIMStruct *wim,
  *     Failed to set security descriptor on a file
  *     (only if ::WIMLIB_EXTRACT_FLAG_STRICT_ACLS) specified in @p
  *     extract_flags.
- * @retval ::WIMLIB_ERR_SET_SECURITY
- *     Failed to set security descriptor on a file
- *     (only if ::WIMLIB_EXTRACT_FLAG_STRICT_ACLS) specified in @p
- *     extract_flags.
+ * @retval ::WIMLIB_ERR_SET_TIMESTAMPS
+ *     Failed to set timestamps on a file (only if
+ *     ::WIMLIB_EXTRACT_FLAG_STRICT_TIMESTAMPS) specified in @p extract_flags.
  * @retval ::WIMLIB_ERR_SPLIT_INVALID
  *     The WIM is a split WIM, but the parts specified do not form a complete
  *     split WIM because they do not include all the parts of the original WIM,
@@ -1872,7 +1871,8 @@ wimlib_extract_image(WIMStruct *wim, int image,
                     wimlib_progress_func_t progress_func);
 
 /**
- * Extract one or more images from a pipe on which a pipable WIM is being sent.
+ * Since wimlib v1.5.0:  Extract one or more images from a pipe on which a
+ * pipable WIM is being sent.
  *
  * See the documentation for ::WIMLIB_WRITE_FLAG_PIPABLE for more information
  * about pipable WIMs.
@@ -2061,14 +2061,13 @@ wimlib_get_wim_info(WIMStruct *wim, struct wimlib_wim_info *info);
 
 /**
  * Initialization function for wimlib.  Call before using any other wimlib
- * function.
+ * function except wimlib_set_print_errors().  (However, currently this is not
+ * strictly necessary and it will be called automatically if not done manually,
+ * but you should not rely on this behavior.)
  *
  * @param init_flags
- *     On UNIX, specify ::WIMLIB_INIT_FLAG_ASSUME_UTF8 if wimlib should assume
- *     that all input data, including filenames, are in UTF-8 rather than the
- *     locale-dependent character encoding which may or may not be UTF-8, and
- *     that UTF-8 data can be directly printed to the console.  On Windows, use
- *     0 for this parameter.
+ *     Bitwise OR of ::WIMLIB_INIT_FLAG_ASSUME_UTF8 and/or
+ *     ::WIMLIB_INIT_FLAG_DONT_ACQUIRE_PRIVILEGES.
  *
  * @return 0; other error codes may be returned in future releases.
  */
@@ -2078,7 +2077,7 @@ wimlib_global_init(int init_flags);
 /**
  * Since wimlib 1.2.6:  Cleanup function for wimlib.  This is not re-entrant.
  * You are not required to call this function, but it will release any global
- * memory allocated by the library.
+ * resources allocated by the library.
  */
 extern void
 wimlib_global_cleanup(void);
@@ -2784,6 +2783,8 @@ wimlib_set_memory_allocator(void *(*malloc_func)(size_t),
  *
  * By default, error messages are not printed.
  *
+ * This can be called before wimlib_global_init().
+ *
  * @param show_messages
  *     @c true if error messages are to be printed; @c false if error messages
  *     are not to be printed.
@@ -3089,12 +3090,15 @@ wimlib_write(WIMStruct *wim,
             wimlib_progress_func_t progress_func);
 
 /**
- * Same as wimlib_write(), but write the WIM directly to a file descriptor,
- * which need not be seekable if the write is done in a special pipable WIM
- * format by providing ::WIMLIB_WRITE_FLAG_PIPABLE in @p write_flags.  This can,
- * for example, allow capturing a WIM image and streaming it over the network.
- * See the documentation for ::WIMLIB_WRITE_FLAG_PIPABLE for more information
- * about pipable WIMs.
+ * Since wimlib v1.5.0:  Same as wimlib_write(), but write the WIM directly to a
+ * file descriptor, which need not be seekable if the write is done in a special
+ * pipable WIM format by providing ::WIMLIB_WRITE_FLAG_PIPABLE in @p
+ * write_flags.  This can, for example, allow capturing a WIM image and
+ * streaming it over the network.  See the documentation for
+ * ::WIMLIB_WRITE_FLAG_PIPABLE for more information about pipable WIMs.
+ *
+ * The file descriptor @p fd will not be closed when the write is complete; the
+ * calling code is responsible for this.
  *
  * Return values are mostly the same as wimlib_write(), but also:
  *