]> wimlib.net Git - wimlib/blobdiff - src/wim.c
wimlib_select_image() => select_wim_image()
[wimlib] / src / wim.c
index 1a159578a0338da0ac08ba61e8de2524f7eec6a1..fe2164957c1f80880f2fff9b49af85ba9f0a7f9c 100644 (file)
--- a/src/wim.c
+++ b/src/wim.c
  * along with wimlib; if not, see http://www.gnu.org/licenses/.
  */
 
-#include "wimlib_internal.h"
-#include "io.h"
-#include "lookup_table.h"
-#include "xml.h"
+#include "config.h"
 #include <stdlib.h>
+#include <stdarg.h>
 
 #ifdef WITH_NTFS_3G
 #include <ntfs-3g/volume.h>
 #endif
 
+#include "wimlib_internal.h"
+#include "io.h"
+#include "lookup_table.h"
+#include "xml.h"
+
+
 static int print_metadata(WIMStruct *w)
 {
        print_security_data(wim_security_data(w));
@@ -75,7 +79,7 @@ int for_image(WIMStruct *w, int image, int (*visitor)(WIMStruct *))
                end = image;
        }
        for (; i <= end; i++) {
-               ret = wimlib_select_image(w, i);
+               ret = select_wim_image(w, i);
                if (ret != 0)
                        return ret;
                ret = visitor(w);
@@ -180,7 +184,7 @@ WIMLIBAPI int wimlib_get_num_images(const WIMStruct *w)
        return w->hdr.image_count;
 }
 
-int wimlib_select_image(WIMStruct *w, int image)
+int select_wim_image(WIMStruct *w, int image)
 {
        struct image_metadata *imd;
 
@@ -205,7 +209,6 @@ int wimlib_select_image(WIMStruct *w, int image)
                        destroy_image_metadata(imd, NULL);
                        imd->root_dentry = NULL;
                        imd->security_data = NULL;
-                       imd->lgt = NULL;
                }
        }
 
@@ -259,7 +262,8 @@ WIMLIBAPI int wimlib_resolve_image(WIMStruct *w, const char *image_name_or_num)
        if (!image_name_or_num)
                return WIM_NO_IMAGE;
 
-       if (strcmp(image_name_or_num, "all") == 0)
+       if (strcmp(image_name_or_num, "all") == 0
+           || strcmp(image_name_or_num, "*") == 0)
                return WIM_ALL_IMAGES;
        image = strtol(image_name_or_num, &p, 10);
        if (p != image_name_or_num && *p == '\0') {
@@ -328,6 +332,14 @@ 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
@@ -337,12 +349,26 @@ WIMLIBAPI int wimlib_print_metadata(WIMStruct *w, int image)
 
 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;
@@ -535,7 +561,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;