| 198 | }; |
| 199 | |
| 200 | void create_mapping(struct file_mapping& data, const std::string& fn) |
| 201 | { |
| 202 | #ifdef LIBRAW_WIN32_CALLS |
| 203 | std::wstring fpath(fn.begin(), fn.end()); |
| 204 | if ((data.fd = CreateFileW(fpath.c_str(), GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)) == INVALID_HANDLE_VALUE) return; |
| 205 | LARGE_INTEGER fs; |
| 206 | if (!GetFileSizeEx(data.fd, &fs)) return; |
| 207 | data.fsize = fs.QuadPart; |
| 208 | if ((data.fd_map = ::CreateFileMapping(data.fd, 0, PAGE_READONLY, fs.HighPart, fs.LowPart, 0)) == INVALID_HANDLE_VALUE) return; |
| 209 | data.map = MapViewOfFile(data.fd_map, FILE_MAP_READ, 0, 0, data.fsize); |
| 210 | #else |
| 211 | struct stat stt; |
| 212 | if ((data.fd = open(fn.c_str(), O_RDONLY)) < 0) return; |
| 213 | if (fstat(data.fd, &stt) != 0) return; |
| 214 | data.fsize = stt.st_size; |
| 215 | data.map = mmap(0, data.fsize, PROT_READ | PROT_WRITE, MAP_PRIVATE, data.fd, 0); |
| 216 | return; |
| 217 | #endif |
| 218 | } |
| 219 | |
| 220 | void close_mapping(struct file_mapping& data) |
| 221 | { |