]> wimlib.net Git - wimlib/blobdiff - src/write.c
Windows native build
[wimlib] / src / write.c
index da0ef9c9b617817b4e6602b935d5221cd42985a8..ea3f583c77442ec960ec4517b515caee91a3e8f5 100644 (file)
 #include <sys/file.h>
 #endif
 
+#ifdef __WIN32__
+#      include <windows.h>
+#      ifdef ERROR
+#              undef ERROR
+#      endif
+#endif
+
 #include "list.h"
 #include "wimlib_internal.h"
 #include "buffer_io.h"
 #include <stdlib.h>
 #endif
 
+#ifdef __WIN32__
+#      ifdef fsync
+#              undef fsync
+#      endif
+#      define fsync(fd) 0
+#endif
+
 static int fflush_and_ftruncate(FILE *fp, off_t size)
 {
        int ret;
@@ -259,7 +273,7 @@ static int prepare_resource_for_read(struct wim_lookup_table_entry *lte
 {
        switch (lte->resource_location) {
        case RESOURCE_IN_FILE_ON_DISK:
-               if (!lte->file_on_disk_fp) {
+               if (!lte->file_on_disk_fp) {
                        lte->file_on_disk_fp = fopen(lte->file_on_disk, "rb");
                        if (!lte->file_on_disk_fp) {
                                ERROR_WITH_ERRNO("Failed to open the file "
@@ -297,7 +311,7 @@ static int prepare_resource_for_read(struct wim_lookup_table_entry *lte
 #if defined(__CYGWIN__) || defined(__WIN32__)
        case RESOURCE_WIN32:
                if (!lte->file_on_disk_fp) {
-                       lte->file_on_disk_fp = win32_open_file(lte->file_on_disk);
+                       lte->file_on_disk_fp = win32_open_file_readonly(lte->file_on_disk);
                        if (!lte->file_on_disk_fp)
                                return WIMLIB_ERR_OPEN;
                }
@@ -1205,6 +1219,16 @@ out:
        return ret;
 }
 
+static long get_default_num_threads()
+{
+#ifdef __WIN32__
+       SYSTEM_INFO sysinfo;
+       GetSystemInfo(&sysinfo);
+       return sysinfo.dwNumberOfProcessors;
+#else
+       return sysconf(_SC_NPROCESSORS_ONLN);
+#endif
+}
 
 static int write_stream_list_parallel(struct list_head *stream_list,
                                      FILE *out_fp,
@@ -1220,8 +1244,8 @@ static int write_stream_list_parallel(struct list_head *stream_list,
        pthread_t *compressor_threads = NULL;
 
        if (num_threads == 0) {
-               long nthreads = sysconf(_SC_NPROCESSORS_ONLN);
-               if (nthreads < 1) {
+               long nthreads = get_default_num_threads();
+               if (nthreads < 1 || nthreads > UINT_MAX) {
                        WARNING("Could not determine number of processors! Assuming 1");
                        goto out_serial;
                } else {