*/
/*
- * Copyright (C) 2012 Eric Biggers
+ * Copyright (C) 2012, 2013 Eric Biggers
*
* This file is part of wimlib, a library for working with WIM files.
*
char *display_description;
union {
char *flags;
- struct lookup_table *lookup_table;
+ struct wim_lookup_table *lookup_table;
};
};
destroy_image_info(&wim_info->images[image - 1]);
- memcpy(&wim_info->images[image - 1],
- &wim_info->images[image],
- (wim_info->num_images - image) * sizeof(struct image_info));
+ memmove(&wim_info->images[image - 1],
+ &wim_info->images[image],
+ (wim_info->num_images - image) * sizeof(struct image_info));
if (--wim_info->num_images == 0) {
free_wim_info(wim_info);
}
#endif
-static int calculate_dentry_statistics(struct dentry *dentry, void *arg)
+static int calculate_dentry_statistics(struct wim_dentry *dentry, void *arg)
{
struct image_info *info = arg;
- struct lookup_table *lookup_table = info->lookup_table;
- const struct inode *inode = dentry->d_inode;
- struct lookup_table_entry *lte;
+ struct wim_lookup_table *lookup_table = info->lookup_table;
+ const struct wim_inode *inode = dentry->d_inode;
+ struct wim_lookup_table_entry *lte;
/* Update directory count and file count.
*
info->hard_link_bytes += wim_resource_size(lte);
}
- if (inode->link_count >= 2 && dentry_is_first_in_inode(dentry)) {
- for (unsigned i = 0; i < inode->num_ads; i++) {
- if (inode->ads_entries[i].stream_name_len) {
+ if (inode->i_nlink >= 2 && dentry_is_first_in_inode(dentry)) {
+ for (unsigned i = 0; i < inode->i_num_ads; i++) {
+ if (inode->i_ads_entries[i].stream_name_len) {
lte = inode_stream_lte(inode, i + 1, lookup_table);
if (lte) {
- info->hard_link_bytes += inode->link_count *
+ info->hard_link_bytes += inode->i_nlink *
wim_resource_size(lte);
}
}
putchar('\n');
}
+void libxml_global_init()
+{
+ xmlInitParser();
+}
+
+void libxml_global_cleanup()
+{
+ xmlCleanupParser();
+}
+
/*
* Reads the XML data from a WIM file.
*/
if (resource_is_compressed(res_entry)) {
ERROR("XML data is supposed to be uncompressed");
ret = WIMLIB_ERR_XML;
- goto out_cleanup_parser;
+ goto out;
}
if (res_entry->size < 2) {
ERROR("XML data must be at least 2 bytes long");
ret = WIMLIB_ERR_XML;
- goto out_cleanup_parser;
+ goto out;
}
xml_data = MALLOC(res_entry->size + 2);
if (!xml_data) {
ret = WIMLIB_ERR_NOMEM;
- goto out_cleanup_parser;
+ goto out;
}
ret = read_uncompressed_resource(fp, res_entry->offset,
if (ret != 0)
goto out_free_doc;
- DEBUG("Freeing XML tree.");
-
*xml_data_ret = xml_data;
xml_data = NULL;
out_free_doc:
+ DEBUG("Freeing XML tree.");
xmlFreeDoc(doc);
out_free_xml_data:
FREE(xml_data);
-out_cleanup_parser:
- xmlCleanupParser();
+out:
return ret;
}