* wimlib; if not, see http://www.gnu.org/licenses/.
*/
-#include "wimlib_internal.h"
-#include "dentry.h"
-#include "lookup_table.h"
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "wimlib/dentry.h"
+#include "wimlib/error.h"
+#include "wimlib/file_io.h"
+#include "wimlib/lookup_table.h"
+#include "wimlib/metadata.h"
+#include "wimlib/resource.h"
+#include "wimlib/security.h"
/*
* Reads a metadata resource for an image in the WIM file. The metadata
* resource of the root dentry. */
wimlib_assert(imd->security_data == NULL);
- ret = read_security_data(buf, metadata_len, &imd->security_data);
+ ret = read_wim_security_data(buf, metadata_len, &imd->security_data);
if (ret)
goto out_free_buf;
out_free_dentry_tree:
free_dentry_tree(dentry, NULL);
out_free_security_data:
- free_security_data(imd->security_data);
+ free_wim_security_data(imd->security_data);
imd->security_data = NULL;
out_free_buf:
FREE(buf);
u32 total_length = sizeof(u64) * sd->num_entries + 2 * sizeof(u32);
for (u32 i = 0; i < sd->num_entries; i++)
total_length += sd->sizes[i];
- sd->total_length = total_length;
+ sd->total_length = (total_length + 7) & ~7;
}
/* Like write_wim_resource(), but the resource is specified by a buffer of
struct wim_lookup_table_entry *lte;
u64 metadata_original_size;
struct wim_security_data *sd;
+ struct wim_image_metadata *imd;
wimlib_assert(w->out_fd != -1);
wimlib_assert(w->current_image != WIMLIB_NO_IMAGE);
DEBUG("Writing metadata resource for image %d (offset = %"PRIu64")",
w->current_image, filedes_offset(w->out_fd));
+ imd = w->image_metadata[w->current_image - 1];
- root = wim_root_dentry(w);
- sd = wim_security_data(w);
+ root = imd->root_dentry;
+ sd = imd->security_data;
+
+ if (!root) {
+ /* Empty image; create a dummy root. */
+ ret = new_filler_directory(T(""), &root);
+ if (ret)
+ return ret;
+ imd->root_dentry = root;
+ }
/* Offset of first child of the root dentry. It's equal to:
* - The total length of the security data, rounded to the next 8-byte
}
/* Write the security data into the resource buffer */
- p = write_security_data(sd, buf);
+ p = write_wim_security_data(sd, buf);
/* Write the dentry tree into the resource buffer */
p = write_dentry_tree(root, p);