*/
/*
- * Copyright (C) 2012 Eric Biggers
+ * Copyright (C) 2012, 2013 Eric Biggers
*
* This file is part of wimlib, a library for working with WIM files.
*
#include "lookup_table.h"
#include "xml.h"
-static int inode_allocate_needed_ltes(struct inode *inode,
- struct lookup_table *src_lookup_table,
- struct lookup_table *dest_lookup_table,
- struct list_head *lte_list_head)
+static int
+inode_allocate_needed_ltes(struct wim_inode *inode,
+ struct wim_lookup_table *src_lookup_table,
+ struct wim_lookup_table *dest_lookup_table,
+ struct list_head *lte_list_head)
{
- struct lookup_table_entry *src_lte, *dest_lte;
+ struct wim_lookup_table_entry *src_lte, *dest_lte;
unsigned i;
inode_unresolve_ltes(inode);
- for (i = 0; i <= inode->num_ads; i++) {
+ for (i = 0; i <= inode->i_num_ads; i++) {
src_lte = inode_stream_lte_unresolved(inode, i,
src_lookup_table);
if (src_lte && src_lte->out_refcnt == 0) {
return 0;
}
-static void inode_move_ltes_to_table(struct inode *inode,
- struct lookup_table *src_lookup_table,
- struct lookup_table *dest_lookup_table,
- struct list_head *lte_list_head)
+static void
+inode_move_ltes_to_table(struct wim_inode *inode,
+ struct wim_lookup_table *src_lookup_table,
+ struct wim_lookup_table *dest_lookup_table,
+ struct list_head *lte_list_head)
{
- struct lookup_table_entry *src_lte, *dest_lte;
+ struct wim_lookup_table_entry *src_lte, *dest_lte;
unsigned i;
- struct dentry *dentry;
+ struct wim_dentry *dentry;
inode_for_each_dentry(dentry, inode)
dentry->refcnt++;
- for (i = 0; i <= inode->num_ads; i++) {
+ for (i = 0; i <= inode->i_num_ads; i++) {
src_lte = inode_stream_lte_unresolved(inode, i, src_lookup_table);
if (src_lte) {
dest_lte = inode_stream_lte_unresolved(inode, i,
next = lte_list_head->next;
list_del(next);
dest_lte = container_of(next,
- struct lookup_table_entry,
+ struct wim_lookup_table_entry,
staging_list);
dest_lte->part_number = 1;
dest_lte->refcnt = 0;
wimlib_assert(hashes_equal(dest_lte->hash, src_lte->hash));
lookup_table_insert(dest_lookup_table, dest_lte);
}
- dest_lte->refcnt += inode->link_count;
+ dest_lte->refcnt += inode->i_nlink;
}
}
}
/*
* Copies an image, or all the images, from a WIM file, into another WIM file.
*/
-WIMLIBAPI int wimlib_export_image(WIMStruct *src_wim,
- int src_image,
- WIMStruct *dest_wim,
- const char *dest_name,
- const char *dest_description,
- int export_flags,
- WIMStruct **additional_swms,
- unsigned num_additional_swms,
- wimlib_progress_func_t progress_func)
+WIMLIBAPI int
+wimlib_export_image(WIMStruct *src_wim,
+ int src_image,
+ WIMStruct *dest_wim,
+ const tchar *dest_name,
+ const tchar *dest_description,
+ int export_flags,
+ WIMStruct **additional_swms,
+ unsigned num_additional_swms,
+ wimlib_progress_func_t progress_func)
{
int ret;
struct wim_security_data *sd;
- struct lookup_table *joined_tab, *src_wim_tab_save;
- struct image_metadata *src_imd;
+ struct wim_lookup_table *joined_tab, *src_wim_tab_save;
+ struct wim_image_metadata *src_imd;
struct hlist_node *cur_node;
struct list_head lte_list_head;
- struct inode *inode;
+ struct wim_inode *inode;
if (dest_wim->hdr.total_parts != 1) {
ERROR("Exporting an image to a split WIM is "
if (!dest_name) {
dest_name = wimlib_get_image_name(src_wim, src_image);
- DEBUG("Using name `%s' for source image %d",
+ DEBUG("Using name `%"TS"' for source image %d",
dest_name, src_image);
}
if (!dest_description) {
dest_description = wimlib_get_image_description(src_wim,
src_image);
- DEBUG("Using description `%s' for source image %d",
+ DEBUG("Using description `%"TS"' for source image %d",
dest_description, src_image);
}
- DEBUG("Exporting image %d from `%s'", src_image, src_wim->filename);
+ DEBUG("Exporting image %d from `%"TS"'", src_image, src_wim->filename);
if (wimlib_image_name_in_use(dest_wim, dest_name)) {
- ERROR("There is already an image named `%s' in the "
+ ERROR("There is already an image named `%"TS"' in the "
"destination WIM", dest_name);
return WIMLIB_ERR_IMAGE_NAME_COLLISION;
}
ret = select_wim_image(src_wim, src_image);
if (ret != 0) {
- ERROR("Could not select image %d from the WIM `%s' "
+ ERROR("Could not select image %d from the WIM `%"TS"' "
"to export it", src_image, src_wim->filename);
goto out;
}
/* Pre-allocate the new lookup table entries that will be needed. This
* way, it's not possible to run out of memory part-way through
* modifying the lookup table of the destination WIM. */
- INIT_LIST_HEAD(<e_list_head);
for_lookup_table_entry(src_wim->lookup_table, lte_zero_out_refcnt, NULL);
src_imd = wim_get_current_image_metadata(src_wim);
-
- hlist_for_each_entry(inode, cur_node, &src_imd->inode_list, hlist) {
+ INIT_LIST_HEAD(<e_list_head);
+ hlist_for_each_entry(inode, cur_node, &src_imd->inode_list, i_hlist) {
ret = inode_allocate_needed_ltes(inode,
src_wim->lookup_table,
dest_wim->lookup_table,
* the lookup table of the destination WIM and the boot index, if
* needed. */
sd->refcnt++;
- hlist_for_each_entry(inode, cur_node, &src_imd->inode_list, hlist) {
+ hlist_for_each_entry(inode, cur_node, &src_imd->inode_list, i_hlist) {
inode_move_ltes_to_table(inode,
src_wim->lookup_table,
dest_wim->lookup_table,
goto out;
out_xml_delete_image:
- xml_delete_image(&dest_wim->wim_info, dest_wim->hdr.image_count);
+ xml_delete_image(&dest_wim->wim_info, dest_wim->hdr.image_count + 1);
out_free_ltes:
{
- struct lookup_table_entry *lte, *tmp;
+ struct wim_lookup_table_entry *lte, *tmp;
list_for_each_entry_safe(lte, tmp, <e_list_head, staging_list)
free_lookup_table_entry(lte);
}