#include <stddef.h>
#include <stdlib.h>
#include <string.h>
+#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include "sparse_crc32.h"
#include "sparse_format.h"
-#ifndef USE_MINGW
-#include <sys/mman.h>
-#define O_BINARY 0
-#else
-#define ftruncate64 ftruncate
-#endif
-
#if defined(__APPLE__) && defined(__MACH__)
#define lseek64 lseek
#define ftruncate64 ftruncate
aligned_diff = offset - aligned_offset;
buffer_size = len + aligned_diff;
-#ifndef USE_MINGW
char *data = mmap64(NULL, buffer_size, PROT_READ, MAP_SHARED, fd,
aligned_offset);
if (data == MAP_FAILED) {
return -errno;
}
ptr = data + aligned_diff;
-#else
- off64_t pos;
- char *data = malloc(len);
- if (!data) {
- return -errno;
- }
- pos = lseek64(fd, offset, SEEK_SET);
- if (pos < 0) {
- free(data);
- return -errno;
- }
- ret = read_all(fd, data, len);
- if (ret < 0) {
- free(data);
- return ret;
- }
- ptr = data;
-#endif
ret = out->sparse_ops->write_data_chunk(out, len, ptr);
-#ifndef USE_MINGW
munmap(data, buffer_size);
-#else
- free(data);
-#endif
return ret;
}
{
int ret;
- int file_fd = open(file, O_RDONLY | O_BINARY);
+ int file_fd = open(file, O_RDONLY);
if (file_fd < 0) {
return -errno;
}