X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fwim.c;h=2c67ebabb4edf5b267a27f0fb747e6b77aa2dc10;hp=d105e8bacf1b250cee003e0d17ce8c2ff68e0663;hb=e03410487e77ea4aa8af8ebcf279f4ccbcd9ccba;hpb=b1c4e6a269ae4c969060e33685db12f76a204a58 diff --git a/src/wim.c b/src/wim.c index d105e8ba..2c67ebab 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. */ @@ -225,9 +220,7 @@ int wimlib_select_image(WIMStruct *w, int image) "lookup table entry:"); 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); } } @@ -335,17 +328,43 @@ 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 (!w) + return WIMLIB_ERR_INVALID_PARAM; + if (w->hdr.part_number != 1) { + ERROR("We cannot show the metadata from part %hu of a %hu-part split WIM.", + w->hdr.part_number, w->hdr.total_parts); + ERROR("Select the first part of the split WIM to see the metadata."); + return WIMLIB_ERR_SPLIT_UNSUPPORTED; + } + 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); } WIMLIBAPI int wimlib_print_files(WIMStruct *w, int image) { + if (!w) + return WIMLIB_ERR_INVALID_PARAM; + if (w->hdr.part_number != 1) { + ERROR("We cannot list the files from part %hu of a %hu-part split WIM", + w->hdr.part_number, w->hdr.total_parts); + ERROR("Select the first part of the split WIM if you'd like to list the files."); + return WIMLIB_ERR_SPLIT_UNSUPPORTED; + } return for_image(w, image, print_files); } /* Sets the index of the bootable image. */ WIMLIBAPI int wimlib_set_boot_idx(WIMStruct *w, int boot_idx) { + if (!w) + return WIMLIB_ERR_INVALID_PARAM; + if (w->hdr.total_parts != 1) { + ERROR("We cannot modify the boot index of a split WIM"); + return WIMLIB_ERR_SPLIT_UNSUPPORTED; + } if (boot_idx < 0 || boot_idx > w->hdr.image_count) return WIMLIB_ERR_INVALID_IMAGE; w->hdr.boot_idx = boot_idx; @@ -444,9 +463,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; @@ -540,7 +557,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) { - DEBUG("Freeing WIMStruct"); + DEBUG2("Freeing WIMStruct"); if (!w) return; @@ -559,6 +576,12 @@ WIMLIBAPI void wimlib_free(WIMStruct *w) 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); }