/*
* Copyright (C) 2012, 2013 Eric Biggers
*
- * wimlib - Library for working with WIM files
- *
* This file is part of wimlib, a library for working with WIM files.
*
* wimlib is free software; you can redistribute it and/or modify it under the
* along with wimlib; if not, see http://www.gnu.org/licenses/.
*/
-#include "config.h"
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "wimlib/error.h"
+#include "wimlib/dentry.h"
+#include "wimlib/encoding.h"
+#include "wimlib/file_io.h"
+#include "wimlib/integrity.h"
+#include "wimlib/lookup_table.h"
+#include "wimlib/metadata.h"
+#ifdef WITH_NTFS_3G
+# include "wimlib/ntfs_3g.h" /* for do_ntfs_umount() */
+#endif
+#include "wimlib/security.h"
+#include "wimlib/wim.h"
+#include "wimlib/xml.h"
+
+#ifdef __WIN32__
+# include "wimlib/win32.h" /* for realpath() replacement */
+#endif
#include <errno.h>
#include <fcntl.h>
+#ifndef __WIN32__
+# include <langinfo.h>
+#endif
#include <limits.h>
#include <stdarg.h>
#include <stdlib.h>
#include <unistd.h>
-#ifdef __WIN32__
-# include "win32.h"
-#else
-# include <langinfo.h>
-#endif
-
-#include "buffer_io.h"
-#include "dentry.h"
-#include "lookup_table.h"
-#include "wimlib_internal.h"
-#include "xml.h"
-
static int
image_print_metadata(WIMStruct *w)
{
DEBUG("Printing metadata for image %d", w->current_image);
- print_security_data(wim_security_data(w));
+ print_wim_security_data(wim_security_data(w));
return for_dentry_in_tree(wim_root_dentry(w), print_dentry,
w->lookup_table);
}
}
static WIMStruct *
-new_wim_struct()
+new_wim_struct(void)
{
WIMStruct *w = CALLOC(1, sizeof(WIMStruct));
- w->in_fd = INVALID_FILEDES;
- w->out_fd = INVALID_FILEDES;
- w->current_image = WIMLIB_NO_IMAGE;
+ if (w) {
+ w->in_fd = -1;
+ w->out_fd = -1;
+ }
return w;
}
}
w->current_image = image;
imd = wim_get_current_image_metadata(w);
- if (imd->root_dentry) {
+ if (imd->root_dentry || imd->modified) {
ret = 0;
} else {
#ifdef ENABLE_DEBUG
}
static int
-do_open_wim(const tchar *filename, filedes_t *fd_ret)
+do_open_wim(const tchar *filename, int *fd_ret)
{
int fd;
- fd = open(filename, O_RDONLY);
+ fd = topen(filename, O_RDONLY | O_BINARY);
if (fd == -1) {
ERROR_WITH_ERRNO("Can't open \"%"TS"\" read-only", filename);
return WIMLIB_ERR_OPEN;
int
reopen_wim(WIMStruct *w)
{
- wimlib_assert(w->in_fd == INVALID_FILEDES);
+ wimlib_assert(w->in_fd == -1);
return do_open_wim(w->filename, &w->in_fd);
}
int
close_wim(WIMStruct *w)
{
- close(w->in_fd);
- w->in_fd = INVALID_FILEDES;
+ if (w->in_fd != -1) {
+ close(w->in_fd);
+ w->in_fd = -1;
+ }
return 0;
}
return WIMLIB_ERR_OPEN;
}
- ret = read_header(w->in_fd, &w->hdr, open_flags);
+ ret = read_header(w->filename, w->in_fd, &w->hdr, open_flags);
if (ret)
return ret;
{
free_dentry_tree(imd->root_dentry, table);
imd->root_dentry = NULL;
- free_security_data(imd->security_data);
+ free_wim_security_data(imd->security_data);
imd->security_data = NULL;
if (free_metadata_lte) {
struct wim_image_metadata *
-new_image_metadata()
+new_image_metadata(void)
{
struct wim_image_metadata *imd;
if (!w)
return;
- if (w->in_fd != INVALID_FILEDES)
+ if (w->in_fd != -1)
close(w->in_fd);
- if (w->out_fd != INVALID_FILEDES)
+ if (w->out_fd != -1)
close(w->out_fd);
free_lookup_table(w->lookup_table);
}
static bool
-test_locale_ctype_utf8()
+test_locale_ctype_utf8(void)
{
#ifdef __WIN32__
return false;
/* Free global memory allocations. Not strictly necessary if the process using
* wimlib is just about to exit (as is the case for 'imagex'). */
WIMLIBAPI void
-wimlib_global_cleanup()
+wimlib_global_cleanup(void)
{
libxml_global_cleanup();
iconv_global_cleanup();