]> granicus.if.org Git - strace/commitdiff
fcntl.c: use <linux/fcntl.h> instead of <fcntl.h>
authorDmitry V. Levin <ldv@altlinux.org>
Fri, 9 Oct 2015 01:38:07 +0000 (01:38 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Thu, 26 Nov 2015 01:37:34 +0000 (01:37 +0000)
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.

Makefile.am
configure.ac
fcntl.c
flock.h [new file with mode: 0644]

index dbe15d81a7f04c88027fe4ab0caea5cc50486a11..55379b739321c7e85ea414a49839bee6489846fd 100644 (file)
@@ -65,6 +65,7 @@ strace_SOURCES =      \
        file.c          \
        file_handle.c   \
        flock.c         \
+       flock.h         \
        futex.c         \
        get_robust_list.c \
        getcpu.c        \
index 286db29cd603dd2b1c59a336a563e1ed6b782d45..29ea904f9fe4c089ff1cd7610e897137ab545127 100644 (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>])
 
diff --git a/fcntl.c b/fcntl.c
index 3cf984bc6c2aa3056cae7ca20d31884fd449563d..226c946c75cb3fb40d4639dbe7b55afd98f50b09 100644 (file)
--- a/fcntl.c
+++ b/fcntl.c
@@ -29,7 +29,7 @@
  */
 
 #include "defs.h"
-#include <fcntl.h>
+#include "flock.h"
 
 #include "xlat/fcntlcmds.h"
 #include "xlat/fdflags.h"
 
 #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 (
diff --git a/flock.h b/flock.h
new file mode 100644 (file)
index 0000000..33b7538
--- /dev/null
+++ b/flock.h
@@ -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