#include "lookup_table.h"
#include "xml.h"
-
static int print_metadata(WIMStruct *w)
{
DEBUG("Printing metadata for image %d", w->current_image);
destroy_image_metadata(imd, NULL);
imd->root_dentry = NULL;
imd->security_data = NULL;
+ INIT_HLIST_HEAD(&imd->inode_list);
}
}
return w->hdr.boot_idx;
}
-/* Opens a WIM readable */
-int open_wim_readable(WIMStruct *w, const char *path)
-{
- if (w->fp != NULL)
- fclose(w->fp);
- wimlib_assert(path != NULL);
- w->fp = fopen(path, "rb");
- if (!w->fp) {
- ERROR_WITH_ERRNO("Failed to open `%s' for reading",
- path);
- return WIMLIB_ERR_OPEN;
- }
- return 0;
-}
-
-/* Opens a WIM writable */
-int open_wim_writable(WIMStruct *w, const char *path,
- bool trunc, bool readable)
-{
- const char *mode;
- if (trunc)
- if (readable)
- mode = "w+b";
- else
- mode = "wb";
- else
- mode = "r+b";
-
- DEBUG("Opening `%s' read-write", path);
- wimlib_assert(w->out_fp == NULL);
- wimlib_assert(path != NULL);
- w->out_fp = fopen(path, mode);
- if (!w->out_fp) {
- ERROR_WITH_ERRNO("Failed to open `%s' for writing", path);
- return WIMLIB_ERR_OPEN;
- }
- return 0;
-}
-
/*
* Begins the reading of a WIM file; opens the file and reads its header and
* lookup table, and optionally checks the integrity.
DEBUG("Reading the WIM file `%s'", in_wim_path);
- ret = open_wim_readable(w, in_wim_path);
- if (ret != 0)
- goto out;
+ w->fp = fopen(in_wim_path, "rb");
+ if (!w->fp) {
+ ERROR_WITH_ERRNO("Failed to open `%s' for reading",
+ in_wim_path);
+ return WIMLIB_ERR_OPEN;
+ }
+ /* The absolute path to the WIM is requested so that wimlib_overwrite()
+ * still works even if the process changes its working directory. This
+ * actually happens if a WIM is mounted read-write, since the FUSE
+ * thread changes directory to "/", and it needs to be able to find the
+ * WIM file again.
+ *
+ * This will break if the full path to the WIM changes in the
+ * intervening time...
+ */
w->filename = realpath(in_wim_path, NULL);
if (!w->filename) {
ERROR_WITH_ERRNO("Failed to resolve WIM filename");
WIMStruct *w;
int ret;
- DEBUG("wim_file = `%s', open_flags = %#x", wim_file, open_flags);
+ if (!wim_file || !w_ret)
+ return WIMLIB_ERR_INVALID_PARAM;
w = new_wim_struct();
if (!w) {
ERROR("Failed to allocate memory for WIMStruct");