diff options
author | Carl Smith <carl.smith@alliedtelesis.co.nz> | 2019-11-13 14:37:39 +1300 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2019-11-14 00:34:37 +0000 |
commit | e16707b5b2195fda47c1a3db7ba61f30055d2dbc (patch) | |
tree | 51e352b1512b134b7dc32b9a135a18bca4ae2740 /src/vcl/ldp_socket_wrapper.c | |
parent | 211b9f6ad3e2c4d1b54e85cebf062571ced969b2 (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.c | 30 |
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) { |