diff options
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | desc.c | 42 |
2 files changed, 36 insertions, 8 deletions
diff --git a/configure.ac b/configure.ac index 3ea1956..fa4a4bd 100644 --- a/configure.ac +++ b/configure.ac @@ -257,6 +257,8 @@ AC_CHECK_MEMBERS([struct utsname.domainname],,, [#include <sys/utsname.h>]) AC_CHECK_MEMBERS([struct sigevent._sigev_un._pad, struct sigevent.__pad],,, [#include <signal.h>]) +AC_CHECK_TYPES([struct flock64],,, [#include <fcntl.h>]) + AC_CHECK_DECLS([sys_errlist]) AC_CHECK_DECLS([sys_siglist, _sys_siglist],,, [#include <signal.h>]) AC_CHECK_DECLS(m4_normalize([ @@ -220,7 +220,35 @@ static const struct xlat perf_event_open_flags[] = { { 0, NULL }, }; -#if _LFS64_LARGEFILE +#if defined(F_SETLK64) && F_SETLK64 + 0 != F_SETLK +# define HAVE_F_SETLK64 1 +#else +# define HAVE_F_SETLK64 0 +#endif + +#if defined(F_SETLKW64) && F_SETLKW64 + 0 != F_SETLKW +# define HAVE_F_SETLKW64 1 +#else +# define HAVE_F_SETLKW64 0 +#endif + +#if defined(F_GETLK64) && F_GETLK64+0 != F_GETLK +# define HAVE_F_GETLK64 1 +#else +# define HAVE_F_GETLK64 0 +#endif + +#if defined(X32) || defined(F_FREESP64) || \ + HAVE_F_SETLK64 || HAVE_F_SETLKW64 || HAVE_F_GETLK64 + +#ifndef HAVE_STRUCT_FLOCK64 +struct flock64 { + short int l_type, l_whence; + int64_t l_start, l_len; + int l_pid; +}; +#endif + /* fcntl/lockf */ static void printflock64(struct tcb *tcp, long addr, int getlk) @@ -333,22 +361,22 @@ sys_fcntl(struct tcb *tcp) tprints(", "); printflock(tcp, tcp->u_arg[2], 0); break; -#if _LFS64_LARGEFILE +#if defined(F_FREESP64) || HAVE_F_SETLK64 || HAVE_F_SETLKW64 #ifdef F_FREESP64 case F_FREESP64: #endif /* Linux glibc defines SETLK64 as SETLK, even though the kernel has different values - as does Solaris. */ -#if defined(F_SETLK64) && F_SETLK64 + 0 != F_SETLK +#if HAVE_F_SETLK64 case F_SETLK64: #endif -#if defined(F_SETLKW64) && F_SETLKW64 + 0 != F_SETLKW +#if HAVE_F_SETLKW64 case F_SETLKW64: #endif tprints(", "); printflock64(tcp, tcp->u_arg[2], 0); break; -#endif +#endif /* defined(F_FREESP64) || HAVE_F_SETLK64 || HAVE_F_SETLKW64 */ #ifdef F_NOTIFY case F_NOTIFY: tprints(", "); @@ -393,10 +421,8 @@ sys_fcntl(struct tcb *tcp) tprints(", "); printflock(tcp, tcp->u_arg[2], 1); break; -#if _LFS64_LARGEFILE -#if defined(F_GETLK64) && F_GETLK64+0 != F_GETLK +#if HAVE_F_GETLK64 case F_GETLK64: -#endif tprints(", "); printflock64(tcp, tcp->u_arg[2], 1); break; |