X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fwim.c;h=1a159578a0338da0ac08ba61e8de2524f7eec6a1;hp=6042a90c17809cf6a4fe74c5d84df4d2932a5cd9;hb=2441b3b94cf77a5193550682695dfaf930466764;hpb=4d79cca5bd5027f96ca245b8e58c5ee2c31b5925 diff --git a/src/wim.c b/src/wim.c index 6042a90c..1a159578 100644 --- a/src/wim.c +++ b/src/wim.c @@ -11,16 +11,16 @@ * 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 - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) + * terms of the GNU General Public License as published by the Free + * Software Foundation; either version 3 of the License, or (at your option) * any later version. * * wimlib is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * - * You should have received a copy of the GNU Lesser General Public License + * You should have received a copy of the GNU General Public License * along with wimlib; if not, see http://www.gnu.org/licenses/. */ @@ -30,6 +30,10 @@ #include "xml.h" #include +#ifdef WITH_NTFS_3G +#include +#endif + static int print_metadata(WIMStruct *w) { print_security_data(wim_security_data(w)); @@ -61,8 +65,6 @@ int for_image(WIMStruct *w, int image, int (*visitor)(WIMStruct *)) int i; int end; - DEBUG("for_image(w = %p, image = %d, visitor = %p)", w, image, visitor); - if (image == WIM_ALL_IMAGES) { i = 1; end = w->hdr.image_count; @@ -139,13 +141,6 @@ int wim_hdr_flags_compression_type(int wim_hdr_flags) } } -int wim_resource_compression_type(const WIMStruct *w, - const struct resource_entry *entry) -{ - int wim_ctype = wimlib_get_compression_type(w); - return resource_compression_type(wim_ctype, entry->flags); -} - /* * Creates a WIMStruct for a new WIM file. */ @@ -208,7 +203,9 @@ int wimlib_select_image(WIMStruct *w, int image) if (!imd->modified) { DEBUG("Freeing image %u", w->current_image); destroy_image_metadata(imd, NULL); - memset(imd, 0, sizeof(*imd)); + imd->root_dentry = NULL; + imd->security_data = NULL; + imd->lgt = NULL; } } @@ -221,11 +218,9 @@ int wimlib_select_image(WIMStruct *w, int image) #ifdef ENABLE_DEBUG DEBUG("Reading metadata resource specified by the following " "lookup table entry:"); - print_lookup_table_entry(imd->metadata_lte, NULL); + print_lookup_table_entry(imd->metadata_lte); #endif - return read_metadata_resource(w->fp, - wimlib_get_compression_type(w), - imd); + return read_metadata_resource(w, imd); } } @@ -333,6 +328,10 @@ WIMLIBAPI void wimlib_print_available_images(const WIMStruct *w, int image) * not WIM_NO_IMAGE. */ WIMLIBAPI int wimlib_print_metadata(WIMStruct *w, int image) { + if (image == WIM_ALL_IMAGES) + DEBUG("Printing metadata for all images"); + else + DEBUG("Printing metadata for image %d", image); return for_image(w, image, print_metadata); } @@ -442,9 +441,7 @@ static int begin_read(WIMStruct *w, const char *in_wim_path, int flags) return WIMLIB_ERR_COMPRESSED_LOOKUP_TABLE; } - ret = read_lookup_table(w->fp, w->hdr.lookup_table_res_entry.offset, - w->hdr.lookup_table_res_entry.size, - &w->lookup_table); + ret = read_lookup_table(w); if (ret != 0) return ret; @@ -526,7 +523,7 @@ WIMLIBAPI int wimlib_open_wim(const char *wim_file, int flags, ret = begin_read(w, wim_file, flags); if (ret != 0) { - ERROR("Could not begin reading the WIM file `%s'", wim_file); + DEBUG("Could not begin reading the WIM file `%s'", wim_file); wimlib_free(w); return ret; } @@ -538,7 +535,7 @@ WIMLIBAPI int wimlib_open_wim(const char *wim_file, int flags, * closes all files associated with the WIMStruct. */ WIMLIBAPI void wimlib_free(WIMStruct *w) { - uint i; + DEBUG("Freeing WIMStruct"); if (!w) return; @@ -553,10 +550,16 @@ WIMLIBAPI void wimlib_free(WIMStruct *w) FREE(w->xml_data); free_wim_info(w->wim_info); if (w->image_metadata) { - for (i = 0; i < w->hdr.image_count; i++) + for (uint i = 0; i < w->hdr.image_count; i++) destroy_image_metadata(&w->image_metadata[i], NULL); FREE(w->image_metadata); } +#ifdef WITH_NTFS_3G + if (w->ntfs_vol) { + DEBUG("Unmounting NTFS volume"); + ntfs_umount(w->ntfs_vol, FALSE); + } +#endif FREE(w); }