From 432b50226075b1748448e104a9b6fd90cf33a542 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Sat, 15 Jan 2011 11:01:55 -0500 Subject: [PATCH] vol: fix OS_LOCKFILE/OS_UNLOCKFILE for Windows On UNIX the OS_LOCKFILE and OS_UNLOCKFILE macros return zero on success. Since Windows LockFile() and UnlockFile() return non-zero (TRUE) on success, negate the return value as part of the macro definition. (cherry picked from commit e8e69d5b2c611df249fd613ed068fc030a0e30d1) Reviewed-on: http://gerrit.openafs.org/3664 Reviewed-by: Derrick Brashear Tested-by: BuildBot Change-Id: Ifc9f7efcafee5a17fcf112556184be0072deb108 Reviewed-on: http://gerrit.openafs.org/3823 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- src/vol/ihandle.h | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/vol/ihandle.h b/src/vol/ihandle.h index d3b98e1e4..fb206d897 100644 --- a/src/vol/ihandle.h +++ b/src/vol/ihandle.h @@ -354,6 +354,43 @@ extern int ih_condsync(IHandle_t * ihP); #define IH_CONDSYNC(H) ih_condsync(H) +#ifdef HAVE_PIO +#ifdef AFS_NT40_ENV +#define OS_PREAD(FD, B, S, O) nt_pread(FD, B, S, O) +#define OS_PWRITE(FD, B, S, O) nt_pwrite(FD, B, S, O) +#else +#ifdef O_LARGEFILE +#define OS_PREAD(FD, B, S, O) pread64(FD, B, S, O) +#define OS_PWRITE(FD, B, S, O) pwrite64(FD, B, S, O) +#else /* !O_LARGEFILE */ +#define OS_PREAD(FD, B, S, O) pread(FD, B, S, O) +#define OS_PWRITE(FD, B, S, O) pwrite(FD, B, S, O) +#endif /* !O_LARGEFILE */ +#endif /* AFS_NT40_ENV */ +#else /* !HAVE_PIO */ +extern ssize_t ih_pread(int fd, void * buf, size_t count, afs_foff_t offset); +extern ssize_t ih_pwrite(int fd, const void * buf, size_t count, afs_foff_t offset); +#define OS_PREAD(FD, B, S, O) ih_pread(FD, B, S, O) +#define OS_PWRITE(FD, B, S, O) ih_pwrite(FD, B, S, O) +#endif /* !HAVE_PIO */ +#ifdef AFS_NT40_ENV +#define OS_LOCKFILE(FD, O) (!LockFile(FD, (O & 0xFFFFFFFF), (O >> 32), 2, 0)) +#define OS_UNLOCKFILE(FD, O) (!UnlockFile(FD, (O & 0xFFFFFFFF), (O >> 32), 2, 0)) +#define OS_ERROR(X) nterr_nt2unix(GetLastError(), X) +#define OS_UNLINK(X) nt_unlink(X) +#define OS_DIRSEP "\\" +#define OS_DIRSEPC '\\' +#else +#define OS_LOCKFILE(FD, O) flock(FD, LOCK_EX) +#define OS_UNLOCKFILE(FD, O) flock(FD, LOCK_UN) +#define OS_ERROR(X) X +#define OS_UNLINK(X) unlink(X) +#define OS_DIRSEP "/" +#define OS_DIRSEPC '/' +#endif + + + #ifdef AFS_NAMEI_ENV #ifdef AFS_NT40_ENV -- 2.39.5