#if defined(HAVE_SYS_FILE_H) && defined(HAVE_FLOCK)
/* On BSD, this should be included before "list.h" so that "list.h" can
* overwrite the LIST_HEAD macro. */
-#include <sys/file.h>
+# include <sys/file.h>
+#endif
+
+#ifdef __WIN32__
+# include <win32.h>
#endif
#include "list.h"
#include "xpress.h"
#ifdef ENABLE_MULTITHREADED_COMPRESSION
-#include <pthread.h>
+# include <pthread.h>
#endif
#include <unistd.h>
#include <errno.h>
#ifdef WITH_NTFS_3G
-#include <time.h>
-#include <ntfs-3g/attrib.h>
-#include <ntfs-3g/inode.h>
-#include <ntfs-3g/dir.h>
+# include <time.h>
+# include <ntfs-3g/attrib.h>
+# include <ntfs-3g/inode.h>
+# include <ntfs-3g/dir.h>
#endif
#ifdef HAVE_ALLOCA_H
-#include <alloca.h>
+# include <alloca.h>
#else
-#include <stdlib.h>
+# include <stdlib.h>
#endif
static int fflush_and_ftruncate(FILE *fp, off_t size)
}
break;
#endif
-#if defined(__CYGWIN__) || defined(__WIN32__)
+#ifdef __WIN32__
case RESOURCE_WIN32:
if (!lte->file_on_disk_fp) {
- lte->file_on_disk_fp = win32_open_handle(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;
}
ntfs_inode_close(ni);
}
#endif
-#if defined(__CYGWIN__) || defined(__WIN32__)
+#ifdef __WIN32__
else if (lte->resource_location == RESOURCE_WIN32
&& lte->file_on_disk_fp)
{
- win32_close_handle(lte->file_on_disk_fp);
+ win32_close_file(lte->file_on_disk_fp);
lte->file_on_disk_fp = NULL;
}
#endif
return ret;
}
+static long get_default_num_threads()
+{
+#ifdef __WIN32__
+ return win32_get_number_of_processors();
+#else
+ return sysconf(_SC_NPROCESSORS_ONLN);
+#endif
+}
static int write_stream_list_parallel(struct list_head *stream_list,
FILE *out_fp,
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 {