#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;
{
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 "
#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;
}
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,
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 {