#define _WIMLIB_RESOURCE_H
#include "wimlib/callback.h"
-#include "wimlib/file_io.h"
#include "wimlib/list.h"
#include "wimlib/sha1.h"
#include "wimlib/types.h"
+struct filedes;
struct wim_lookup_table_entry;
struct wim_image_metadata;
-/* Specification of a resource in a WIM file.
+/*
+ * Specification of a resource in a WIM file.
*
- * If a `struct wim_lookup_table_entry' lte has
- * (lte->resource_location == RESOURCE_IN_WIM), then lte->wim_res_spec points to
- * an instance of this structure.
+ * If a `struct wim_lookup_table_entry' lte has (lte->resource_location ==
+ * RESOURCE_IN_WIM), then lte->rspec points to an instance of this structure.
*
- * Normally, there is a one-to-one correspondence between WIM lookup table
- * entries ("streams", each of which may be the contents of a file, for example)
- * and WIM resources. However, WIM resources with the
- * WIM_RESHDR_FLAG_PACKED_STREAMS flag set may actually contain multiple streams
- * compressed together. */
+ * Normally, there is a one-to-one correspondence between lookup table entries
+ * ("streams", each of which may be the contents of a file, for example) and
+ * resources. However, a resource with the WIM_RESHDR_FLAG_SOLID flag set is a
+ * "solid" resource that may contain multiple streams compressed together.
+ */
struct wim_resource_spec {
/* The WIM containing this resource. @wim->in_fd is expected to be a
* file descriptor to the underlying WIM file, opened for reading. */
* or XML data for the WIM. */
#define WIM_RESHDR_FLAG_METADATA 0x02
-/* The resource is compressed using the WIM's default compression type and uses
- * the regular chunk table format. */
+/* The resource is a non-solid resource compressed using the WIM's default
+ * compression type. */
#define WIM_RESHDR_FLAG_COMPRESSED 0x04
/* Unknown meaning; may be intended to indicate a partial stream. Currently
* ignored by wimlib. */
#define WIM_RESHDR_FLAG_SPANNED 0x08
-/* The resource is packed in a special format that may contain multiple
- * underlying streams, or this resource entry represents a stream packed into
- * one such resource. When resources have this flag set, the WIM version number
- * should be WIM_VERSION_PACKED_STREAMS. */
-#define WIM_RESHDR_FLAG_PACKED_STREAMS 0x10
+/* The resource is a solid compressed resource which may contain multiple
+ * streams. This flag is only allowed if the WIM version number is
+ * WIM_VERSION_SOLID. */
+#define WIM_RESHDR_FLAG_SOLID 0x10
/* Magic number in the 'uncompressed_size' field of the resource header that
- * identifies the main entry for a pack. */
-#define WIM_PACK_MAGIC_NUMBER 0x100000000ULL
+ * identifies the main entry for a solid resource. */
+#define SOLID_RESOURCE_MAGIC_NUMBER 0x100000000ULL
-/* Returns true if the specified WIM resource is compressed, using either the
- * original chunk table layout or the alternate layout for resources that may
- * contain multiple packed streams. */
+/* Returns true if the specified WIM resource is compressed (may be either solid
+ * or non-solid) */
static inline bool
resource_is_compressed(const struct wim_resource_spec *rspec)
{
return (rspec->flags & (WIM_RESHDR_FLAG_COMPRESSED |
- WIM_RESHDR_FLAG_PACKED_STREAMS));
+ WIM_RESHDR_FLAG_SOLID));
}
static inline void
put_wim_reshdr(const struct wim_reshdr *reshdr,
struct wim_reshdr_disk *disk_reshdr);
-/* Alternate chunk table format for resources with
- * WIM_RESHDR_FLAG_PACKED_STREAMS set. */
+/* Alternate chunk table format for resources with WIM_RESHDR_FLAG_SOLID set.
+ */
struct alt_chunk_table_header_disk {
/* Uncompressed size of the resource in bytes. */
le64 res_usize;
/* Compression format used for compressed chunks:
* 0 = None
- * 1 = LZX
- * 2 = XPRESS
+ * 1 = XPRESS
+ * 2 = LZX
* 3 = LZMS
*
* This overrides the compression type specified by the WIM header. */
* @lte:
* Stream that is about to be read.
*
- * @is_partial_res:
- * Set to true if the stream is just one of several being read from a
- * single pack and therefore would be extra expensive to read
- * independently.
- *
* @ctx:
* User-provided context.
*
* (without calling @consume_chunk or @end_stream).
*/
typedef int (*read_stream_list_begin_stream_t)(struct wim_lookup_table_entry *lte,
- bool is_partial_res,
void *ctx);
#define BEGIN_STREAM_STATUS_SKIP_STREAM -1
extract_full_stream_to_fd(struct wim_lookup_table_entry *lte,
struct filedes *fd);
-extern int
-extract_chunk_to_fd(const void *chunk, size_t size, void *_fd_p);
-
/* Miscellaneous stream functions. */
extern int
/* Functions to read/write metadata resources. */
extern int
-read_metadata_resource(WIMStruct *wim,
- struct wim_image_metadata *image_metadata);
+read_metadata_resource(struct wim_image_metadata *imd);
extern int
write_metadata_resource(WIMStruct *wim, int image, int write_resource_flags);