fcntl.c: use <linux/fcntl.h> instead of <fcntl.h>

Include <linux/fcntl.h> for proper definitions of F_* constants
and flock structures.

* configure.ac (AC_CHECK_TYPES): Check for struct flock, struct flock64,
struct __kernel_flock, and struct __kernel_flock64 in <linux/fcntl.h>.
* flock.h: New file.
* Makefile.am (strace_SOURCES): Add it.
* fcntl.c: Include it instead of <fcntl.h>.
(struct flock64): Remove.
(printflock): Use struct_kernel_flock instead of struct flock.
(printflock64): Use struct_kernel_flock64 instead of struct flock64.
This commit is contained in:
Дмитрий Левин 2015-10-09 01:38:07 +00:00
parent a5ffa18f13
commit 6250e6c5ed
4 changed files with 25 additions and 12 deletions

View File

@ -65,6 +65,7 @@ strace_SOURCES = \
file.c \
file_handle.c \
flock.c \
flock.h \
futex.c \
get_robust_list.c \
getcpu.c \

View File

@ -338,7 +338,10 @@ AC_CHECK_MEMBERS([struct sigevent._sigev_un._pad,
siginfo_t.si_timerid,
siginfo_t.si_overrun],,, [#include <signal.h>])
AC_CHECK_TYPES([struct flock64],,, [#include <fcntl.h>])
AC_CHECK_TYPES([struct flock,
struct flock64,
struct __kernel_flock,
struct __kernel_flock64],,, [#include <linux/fcntl.h>])
AC_CHECK_MEMBERS([struct timex.tai],,, [#include <sys/timex.h>])

14
fcntl.c
View File

@ -29,7 +29,7 @@
*/
#include "defs.h"
#include <fcntl.h>
#include "flock.h"
#include "xlat/fcntlcmds.h"
#include "xlat/fdflags.h"
@ -48,18 +48,10 @@
#if USE_PRINTFLOCK64
# ifndef HAVE_STRUCT_FLOCK64
struct flock64 {
short int l_type, l_whence;
int64_t l_start, l_len;
int l_pid;
};
# endif
static void
printflock64(struct tcb *tcp, long addr, int getlk)
{
struct flock64 fl;
struct_kernel_flock64 fl;
if (umove_or_printaddr(tcp, addr, &fl))
return;
@ -78,7 +70,7 @@ printflock64(struct tcb *tcp, long addr, int getlk)
static void
printflock(struct tcb *tcp, long addr, int getlk)
{
struct flock fl;
struct_kernel_flock fl;
#if SUPPORTED_PERSONALITIES > 1
if (

17
flock.h Normal file
View File

@ -0,0 +1,17 @@
#include <linux/fcntl.h>
#if defined HAVE_STRUCT_FLOCK
typedef struct flock struct_kernel_flock;
#elif defined HAVE_STRUCT___KERNEL_FLOCK
typedef struct __kernel_flock struct_kernel_flock;
#else
# error struct flock definition not found in <linux/fcntl.h>
#endif
#if defined HAVE_STRUCT_FLOCK64
typedef struct flock64 struct_kernel_flock64;
#elif defined HAVE_STRUCT___KERNEL_FLOCK64
typedef struct __kernel_flock64 struct_kernel_flock64;
#else
# error struct flock64 definition not found in <linux/fcntl.h>
#endif