#include "wimlib/types.h"
-struct image_info;
-struct resource_entry;
-
-/* A struct wim_info structure corresponds to the entire XML data for a WIM file. */
-struct wim_info {
- u64 total_bytes;
- int num_images;
- /* Array of `struct image_info's, one for each image in the WIM that is
- * mentioned in the XML data. */
- struct image_info *images;
-};
-
-/* xml.c */
-extern int
-xml_export_image(const struct wim_info *old_wim_info, int image,
- struct wim_info **new_wim_info_p,
- const tchar *dest_image_name,
- const tchar *dest_image_description);
-
-extern size_t
-xml_get_max_image_name_len(const WIMStruct *wim);
-
-extern void
-xml_update_image_info(WIMStruct *wim, int image);
+/*****************************************************************************/
+
+struct wim_xml_info;
+
+struct wim_xml_info *
+xml_new_info_struct(void);
+
+void
+xml_free_info_struct(struct wim_xml_info *info);
+
+/*****************************************************************************/
+
+int
+xml_get_image_count(const struct wim_xml_info *info);
+
+u64
+xml_get_total_bytes(const struct wim_xml_info *info);
-extern void
-xml_delete_image(struct wim_info **wim_info_p, int image);
+u64
+xml_get_image_total_bytes(const struct wim_xml_info *info, int image);
+
+u64
+xml_get_image_hard_link_bytes(const struct wim_xml_info *info, int image);
+
+bool
+xml_get_wimboot(const struct wim_xml_info *info, int image);
+
+u64
+xml_get_windows_build_number(const struct wim_xml_info *info, int image);
+
+int
+xml_set_wimboot(struct wim_xml_info *info, int image);
+
+/*****************************************************************************/
+
+int
+xml_update_image_info(WIMStruct *wim, int image);
-extern int
-xml_add_image(WIMStruct *wim, const tchar *name);
+int
+xml_add_image(struct wim_xml_info *info, const tchar *name);
-extern void
-free_wim_info(struct wim_info *info);
+int
+xml_export_image(const struct wim_xml_info *src_info, int src_image,
+ struct wim_xml_info *dest_info, const tchar *dest_image_name,
+ const tchar *dest_image_description, bool wimboot);
-extern void
-print_image_info(const struct wim_info *wim_info, int image);
+void
+xml_delete_image(struct wim_xml_info *info, int image);
-extern int
-read_xml_data(int in_fd, const struct resource_entry *res,
- struct wim_info **info_ret);
-extern int
-write_xml_data(const struct wim_info *wim_info, int image, int out_fd,
- u64 total_bytes, struct resource_entry *out_res_entry);
+void
+xml_print_image_info(struct wim_xml_info *info, int image);
-extern void
-libxml_global_init(void);
+/*****************************************************************************/
-extern void
-libxml_global_cleanup(void);
+struct wim_reshdr;
-static inline u64
-wim_info_get_total_bytes(const struct wim_info *info)
-{
- return info->total_bytes;
-}
+#define WIM_TOTALBYTES_USE_EXISTING ((u64)(-1))
+#define WIM_TOTALBYTES_OMIT ((u64)(-2))
-static inline unsigned
-wim_info_get_num_images(const struct wim_info *info)
-{
- return info->num_images;
-}
+int
+read_wim_xml_data(WIMStruct *wim);
-#ifdef ENABLE_CUSTOM_MEMORY_ALLOCATOR
-extern void
-xml_set_memory_allocator(void *(*malloc_func)(size_t),
- void (*free_func)(void *),
- void *(*realloc_func)(void *, size_t));
-#endif
+int
+write_wim_xml_data(WIMStruct *wim, int image,
+ u64 total_bytes, struct wim_reshdr *out_reshdr,
+ int write_resource_flags);
-#endif
+#endif /* _WIMLIB_XML_H */