aboutsummaryrefslogtreecommitdiff
path: root/src/util/disk.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/disk.c')
-rw-r--r--src/util/disk.c88
1 files changed, 1 insertions, 87 deletions
diff --git a/src/util/disk.c b/src/util/disk.c
index 01d5efbe2..8b474542b 100644
--- a/src/util/disk.c
+++ b/src/util/disk.c
@@ -96,7 +96,6 @@ struct GetFileSizeData {
96}; 96};
97 97
98 98
99#ifndef MINGW
100/** 99/**
101 * Translate GNUnet-internal permission bitmap to UNIX file 100 * Translate GNUnet-internal permission bitmap to UNIX file
102 * access permission bitmap. 101 * access permission bitmap.
@@ -131,7 +130,6 @@ translate_unix_perms(enum GNUNET_DISK_AccessPermissions perm)
131 130
132 return mode; 131 return mode;
133} 132}
134#endif
135 133
136 134
137/** 135/**
@@ -191,11 +189,7 @@ getSizeRec(void *cls, const char *fn)
191int 189int
192GNUNET_DISK_handle_invalid(const struct GNUNET_DISK_FileHandle *h) 190GNUNET_DISK_handle_invalid(const struct GNUNET_DISK_FileHandle *h)
193{ 191{
194#ifdef MINGW
195 return ((!h) || (h->h == INVALID_HANDLE_VALUE)) ? GNUNET_YES : GNUNET_NO;
196#else
197 return ((!h) || (h->fd == -1)) ? GNUNET_YES : GNUNET_NO; 192 return ((!h) || (h->fd == -1)) ? GNUNET_YES : GNUNET_NO;
198#endif
199} 193}
200 194
201/** 195/**
@@ -236,26 +230,9 @@ GNUNET_DISK_file_seek(const struct GNUNET_DISK_FileHandle *h,
236 return GNUNET_SYSERR; 230 return GNUNET_SYSERR;
237 } 231 }
238 232
239#ifdef MINGW
240 LARGE_INTEGER li;
241 LARGE_INTEGER new_pos;
242 BOOL b;
243
244 static DWORD t[] = { FILE_BEGIN, FILE_CURRENT, FILE_END };
245 li.QuadPart = offset;
246
247 b = SetFilePointerEx(h->h, li, &new_pos, t[whence]);
248 if (b == 0)
249 {
250 SetErrnoFromWinError(GetLastError());
251 return GNUNET_SYSERR;
252 }
253 return (off_t)new_pos.QuadPart;
254#else
255 static int t[] = { SEEK_SET, SEEK_CUR, SEEK_END }; 233 static int t[] = { SEEK_SET, SEEK_CUR, SEEK_END };
256 234
257 return lseek(h->fd, offset, t[whence]); 235 return lseek(h->fd, offset, t[whence]);
258#endif
259} 236}
260 237
261 238
@@ -1296,7 +1273,7 @@ GNUNET_DISK_file_open(const char *fn,
1296 expfn = GNUNET_STRINGS_filename_expand(fn); 1273 expfn = GNUNET_STRINGS_filename_expand(fn);
1297 if (NULL == expfn) 1274 if (NULL == expfn)
1298 return NULL; 1275 return NULL;
1299#ifndef MINGW 1276
1300 mode = 0; 1277 mode = 0;
1301 if (GNUNET_DISK_OPEN_READWRITE == (flags & GNUNET_DISK_OPEN_READWRITE)) 1278 if (GNUNET_DISK_OPEN_READWRITE == (flags & GNUNET_DISK_OPEN_READWRITE))
1302 oflags = O_RDWR; /* note: O_RDWR is NOT always O_RDONLY | O_WRONLY */ 1279 oflags = O_RDWR; /* note: O_RDWR is NOT always O_RDONLY | O_WRONLY */
@@ -1342,69 +1319,6 @@ GNUNET_DISK_file_open(const char *fn,
1342 GNUNET_free(expfn); 1319 GNUNET_free(expfn);
1343 return NULL; 1320 return NULL;
1344 } 1321 }
1345#else
1346 access = 0;
1347 disp = OPEN_ALWAYS;
1348
1349 if (GNUNET_DISK_OPEN_READWRITE == (flags & GNUNET_DISK_OPEN_READWRITE))
1350 access = FILE_READ_DATA | FILE_WRITE_DATA;
1351 else if (flags & GNUNET_DISK_OPEN_READ)
1352 access = FILE_READ_DATA;
1353 else if (flags & GNUNET_DISK_OPEN_WRITE)
1354 access = FILE_WRITE_DATA;
1355
1356 if (flags & GNUNET_DISK_OPEN_FAILIFEXISTS)
1357 {
1358 disp = CREATE_NEW;
1359 }
1360 else if (flags & GNUNET_DISK_OPEN_CREATE)
1361 {
1362 (void)GNUNET_DISK_directory_create_for_file(expfn);
1363 if (flags & GNUNET_DISK_OPEN_TRUNCATE)
1364 disp = CREATE_ALWAYS;
1365 else
1366 disp = OPEN_ALWAYS;
1367 }
1368 else if (flags & GNUNET_DISK_OPEN_TRUNCATE)
1369 {
1370 disp = TRUNCATE_EXISTING;
1371 }
1372 else
1373 {
1374 disp = OPEN_EXISTING;
1375 }
1376
1377 if (ERROR_SUCCESS == plibc_conv_to_win_pathwconv(expfn, wexpfn))
1378 h = CreateFileW(wexpfn,
1379 access,
1380 FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
1381 NULL,
1382 disp,
1383 FILE_ATTRIBUTE_NORMAL,
1384 NULL);
1385 else
1386 h = INVALID_HANDLE_VALUE;
1387 if (h == INVALID_HANDLE_VALUE)
1388 {
1389 int err;
1390 SetErrnoFromWinError(GetLastError());
1391 err = errno;
1392 LOG_STRERROR_FILE(GNUNET_ERROR_TYPE_INFO, "open", expfn);
1393 GNUNET_free(expfn);
1394 errno = err;
1395 return NULL;
1396 }
1397
1398 if (flags & GNUNET_DISK_OPEN_APPEND)
1399 if (SetFilePointer(h, 0, 0, FILE_END) == INVALID_SET_FILE_POINTER)
1400 {
1401 SetErrnoFromWinError(GetLastError());
1402 LOG_STRERROR_FILE(GNUNET_ERROR_TYPE_WARNING, "SetFilePointer", expfn);
1403 CloseHandle(h);
1404 GNUNET_free(expfn);
1405 return NULL;
1406 }
1407#endif
1408 1322
1409 ret = GNUNET_new(struct GNUNET_DISK_FileHandle); 1323 ret = GNUNET_new(struct GNUNET_DISK_FileHandle);
1410 1324