From: Jeffrey Altman Date: Sat, 15 Jan 2011 16:01:55 +0000 (-0500) Subject: vol: fix OS_LOCKFILE/OS_UNLOCKFILE for Windows X-Git-Tag: upstream/1.6.0.pre2^2~83 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=432b50226075b1748448e104a9b6fd90cf33a542;p=packages%2Fo%2Fopenafs.git 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 --- 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