Glibc 2.28 now provides fcntl64 which is used instead of fcntl
by defining fcntl as fcntl64 in fcntl.h
Type: fix
Change-Id: I87fedfbf3e0d241aafdc920e90f824d71353e0e6
Signed-off-by: Carl Smith <carl.smith@alliedtelesis.co.nz>
add_definitions(-DHAVE_GETCPU)
endif()
add_definitions(-DHAVE_GETCPU)
endif()
+check_c_source_compiles("
+ #define _GNU_SOURCE
+ #include <fcntl.h>
+ int main() { return fcntl64 (0, 0); }
+" HAVE_FCNTL64)
+
+if (HAVE_FCNTL64)
+ add_definitions(-DHAVE_FCNTL64)
+endif()
+#ifdef HAVE_FCNTL64
+int
+fcntl64 (int fd, int cmd, ...)
+#else
int
fcntl (int fd, int cmd, ...)
int
fcntl (int fd, int cmd, ...)
{
vls_handle_t vlsh;
int rv = 0;
{
vls_handle_t vlsh;
int rv = 0;
+#ifdef HAVE_FCNTL64
+ rv = libc_vfcntl64 (fd, cmd, ap);
+#else
rv = libc_vfcntl (fd, cmd, ap);
rv = libc_vfcntl (fd, cmd, ap);
#endif
typedef int (*__libc_fcntl) (int fd, int cmd, ...);
#endif
typedef int (*__libc_fcntl) (int fd, int cmd, ...);
+#ifdef HAVE_FCNTL64
+typedef int (*__libc_fcntl64) (int fd, int cmd, ...);
+#endif
typedef FILE *(*__libc_fopen) (const char *name, const char *mode);
#ifdef HAVE_FOPEN64
typedef FILE *(*__libc_fopen64) (const char *name, const char *mode);
typedef FILE *(*__libc_fopen) (const char *name, const char *mode);
#ifdef HAVE_FOPEN64
typedef FILE *(*__libc_fopen64) (const char *name, const char *mode);
SWRAP_SYMBOL_ENTRY (dup2);
#endif
SWRAP_SYMBOL_ENTRY (fcntl);
SWRAP_SYMBOL_ENTRY (dup2);
#endif
SWRAP_SYMBOL_ENTRY (fcntl);
+#ifdef HAVE_FCNTL64
+ SWRAP_SYMBOL_ENTRY (fcntl64);
+#endif
SWRAP_SYMBOL_ENTRY (fopen);
#ifdef HAVE_FOPEN64
SWRAP_SYMBOL_ENTRY (fopen64);
SWRAP_SYMBOL_ENTRY (fopen);
#ifdef HAVE_FOPEN64
SWRAP_SYMBOL_ENTRY (fopen64);
+#ifdef HAVE_FCNTL64
+DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE int
+libc_vfcntl64 (int fd, int cmd, va_list ap)
+{
+ long int args[4];
+ int rc;
+ int i;
+
+ swrap_bind_symbol_libc (fcntl64);
+
+ for (i = 0; i < 4; i++)
+ {
+ args[i] = va_arg (ap, long int);
+ }
+
+ rc = swrap.libc.symbols._libc_fcntl64.f (fd,
+ cmd,
+ args[0], args[1], args[2],
+ args[3]);
+
+ return rc;
+}
+#endif
+
DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE int
libc_vioctl (int fd, int cmd, va_list ap)
{
DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE int
libc_vioctl (int fd, int cmd, va_list ap)
{
DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE int
libc_vfcntl (int fd, int cmd, va_list ap);
DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE int
libc_vfcntl (int fd, int cmd, va_list ap);
+DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE int
+libc_vfcntl64 (int fd, int cmd, va_list ap);
+
DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE int
libc_vioctl (int fd, int cmd, va_list ap);
DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE int
libc_vioctl (int fd, int cmd, va_list ap);