summaryrefslogtreecommitdiffstats
path: root/src/vcl/ldp_socket_wrapper.c
diff options
context:
space:
mode:
authorCarl Smith <carl.smith@alliedtelesis.co.nz>2019-11-13 14:37:39 +1300
committerFlorin Coras <florin.coras@gmail.com>2019-11-14 00:34:37 +0000
commite16707b5b2195fda47c1a3db7ba61f30055d2dbc (patch)
tree51e352b1512b134b7dc32b9a135a18bca4ae2740 /src/vcl/ldp_socket_wrapper.c
parent211b9f6ad3e2c4d1b54e85cebf062571ced969b2 (diff)
vcl: Handle newer Glibc (>2.28) where fcntl is actually fcntl64
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>
Diffstat (limited to 'src/vcl/ldp_socket_wrapper.c')
-rw-r--r--src/vcl/ldp_socket_wrapper.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/vcl/ldp_socket_wrapper.c b/src/vcl/ldp_socket_wrapper.c
index ddf947d3bcc..81637deedfb 100644
--- a/src/vcl/ldp_socket_wrapper.c
+++ b/src/vcl/ldp_socket_wrapper.c
@@ -173,6 +173,9 @@ typedef int (*__libc_dup2) (int oldfd, int newfd);
#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);
@@ -292,6 +295,9 @@ struct swrap_libc_symbols
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);
@@ -562,6 +568,30 @@ libc_vfcntl (int fd, int cmd, va_list ap)
return rc;
}
+#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)
{