]> wimlib.net Git - wimlib/blobdiff - src/split.c
More test cases and DOS names capture/apply fixes
[wimlib] / src / split.c
index 0321492e7d7cfddc49aec925ba695859039dfaa3..f9811d97dd69ee57fc879e7d4d93ce724d9b1116 100644 (file)
  * 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/.
  */
 
@@ -49,15 +49,17 @@ static int finish_swm(WIMStruct *w, struct lookup_table_entry *lte_chain_head,
        off_t lookup_table_offset = ftello(w->out_fp);
        int ret;
 
-       DEBUG("Writing lookup table for SWM (offset %"PRIu64")\n", 
+       DEBUG("Writing lookup table for SWM (offset %"PRIu64")", 
                        lookup_table_offset);
 
        while (lte_chain_head != NULL) {
+               print_lookup_table_entry(lte_chain_head);
+
                ret = write_lookup_table_entry(lte_chain_head, w->out_fp);
                if (ret != 0)
                        return ret;
                struct lookup_table_entry *prev = lte_chain_head;
-               lte_chain_head = prev->next_lte_in_swm;
+               lte_chain_head = lte_chain_head->next_lte_in_swm;
                prev->next_lte_in_swm = NULL;
        }
        off_t xml_data_offset = ftello(w->out_fp);
@@ -82,7 +84,6 @@ static int copy_resource_to_swm(struct lookup_table_entry *lte, void *__args)
 {
        struct args *args = (struct args*)__args;
        WIMStruct *w = args->w;
-       FILE *out_fp = w->out_fp;
        int ret;
 
        /* metadata resources were already written. */
@@ -108,12 +109,12 @@ static int copy_resource_to_swm(struct lookup_table_entry *lte, void *__args)
 
                if (args->write_flags & WIMLIB_OPEN_FLAG_SHOW_PROGRESS)
                        printf("Writing `%s' (%"PRIu64" of %"PRIu64" bytes, "
-                                       "%.0f%% done)\n", 
-                               args->swm_base_name, 
-                               args->total_bytes_written,
-                               args->total_bytes,
-                               (double)args->total_bytes_written /
-                                       (double)args->total_bytes * 100.0);
+                              "%.0f%% done)\n", 
+                              args->swm_base_name, 
+                              args->total_bytes_written,
+                              args->total_bytes,
+                              (double)args->total_bytes_written /
+                                  (double)args->total_bytes * 100.0);
 
                ret = begin_write(w, args->swm_base_name, args->write_flags);
                if (ret != 0)
@@ -185,10 +186,11 @@ WIMLIBAPI int wimlib_split(const char *wimfile, const char *swm_name,
 
        w->write_metadata = true;
        for (int i = 0; i < w->hdr.image_count; i++) {
-
                struct lookup_table_entry *metadata_lte;
 
-               metadata_lte = w->image_metadata[i].lookup_table_entry;
+               DEBUG("Writing metadata resource %d", i);
+
+               metadata_lte = w->image_metadata[i].metadata_lte;
                ret = copy_resource(metadata_lte, w);
                if (ret != 0)
                        return ret;
@@ -241,22 +243,23 @@ WIMLIBAPI int wimlib_split(const char *wimfile, const char *swm_name,
 
                FILE *fp = fopen(p, "r+b");
                if (!fp) {
-                       ERROR("Failed to open `%s': %m\n", p);
+                       ERROR_WITH_ERRNO("Failed to open `%s'", p);
                        return WIMLIB_ERR_OPEN;
                }
-               char buf[4];
-               put_u16(buf, i);
-               put_u16(buf + 2, total_parts);
+               u8 buf[4];
+               put_u16(&buf[0], i);
+               put_u16(&buf[2], total_parts);
 
                if (fseek(fp, 40, SEEK_SET) != 0 || 
                                fwrite(buf, 1, sizeof(buf), fp) != sizeof(buf)
                                || fclose(fp) != 0) {
-                       ERROR("Error overwriting header of `%s': %m\n", name);
+                       ERROR_WITH_ERRNO("Error overwriting header of `%s'",
+                                        name);
                        return WIMLIB_ERR_WRITE;
                }
        }
        if (write_flags & WIMLIB_OPEN_FLAG_SHOW_PROGRESS)
-               printf("Done!\n");
+               puts("Done!");
        wimlib_free(w);
        return 0;
 }