aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2020-05-26 19:45:45 +0000
committerAndrew Yourtchenko <ayourtch@gmail.com>2020-05-27 11:23:34 +0000
commit449f34e2f33103fe6386299a30cd573626391a94 (patch)
treee0d654eea07c153fa7a592e71d32fbfe51d71163
parente2e3c38be6d91c3deb15373992cd5a764e773060 (diff)
vcl: fix ldp fcntl64
Type: fix Ticket: VPP-1882 Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I342d8f928fcc7de74f9bd288c1a5d63ea1f90020 (cherry picked from commit 0ab36f55753d3d1417c41f8a3aec5e79a882555c)
-rw-r--r--src/vcl/ldp.c29
-rw-r--r--src/vcl/ldp_socket_wrapper.c33
-rw-r--r--src/vcl/ldp_socket_wrapper.h2
3 files changed, 24 insertions, 40 deletions
diff --git a/src/vcl/ldp.c b/src/vcl/ldp.c
index 091c7e5cff4..8492f020bf5 100644
--- a/src/vcl/ldp.c
+++ b/src/vcl/ldp.c
@@ -477,17 +477,11 @@ writev (int fd, const struct iovec * iov, int iovcnt)
return size;
}
-int
-fcntl (int fd, int cmd, ...)
+static int
+fcntl_internal (int fd, int cmd, va_list ap)
{
vls_handle_t vlsh;
int rv = 0;
- va_list ap;
-
- if ((errno = -ldp_init ()))
- return -1;
-
- va_start (ap, cmd);
vlsh = ldp_fd_to_vlsh (fd);
LDBG (0, "fd %u vlsh %d, cmd %u", fd, vlsh, cmd);
@@ -533,6 +527,20 @@ fcntl (int fd, int cmd, ...)
#endif
}
+ return rv;
+}
+
+int
+fcntl (int fd, int cmd, ...)
+{
+ va_list ap;
+ int rv;
+
+ if ((errno = -ldp_init ()))
+ return -1;
+
+ va_start (ap, cmd);
+ rv = fcntl_internal (fd, cmd, ap);
va_end (ap);
return rv;
@@ -544,8 +552,11 @@ fcntl64 (int fd, int cmd, ...)
va_list ap;
int rv;
+ if ((errno = -ldp_init ()))
+ return -1;
+
va_start (ap, cmd);
- rv = fcntl (fd, cmd, ap);
+ rv = fcntl_internal (fd, cmd, ap);
va_end (ap);
return rv;
}
diff --git a/src/vcl/ldp_socket_wrapper.c b/src/vcl/ldp_socket_wrapper.c
index 38ee297174c..253847136ae 100644
--- a/src/vcl/ldp_socket_wrapper.c
+++ b/src/vcl/ldp_socket_wrapper.c
@@ -550,45 +550,16 @@ libc_eventfd (int count, int flags)
int
libc_vfcntl (int fd, int cmd, va_list ap)
{
- long int args[4];
- int rc;
- int i;
-
swrap_bind_symbol_libc (fcntl);
-
- for (i = 0; i < 4; i++)
- {
- args[i] = va_arg (ap, long int);
- }
-
- rc = swrap.libc.symbols._libc_fcntl.f (fd,
- cmd,
- args[0], args[1], args[2], args[3]);
-
- return rc;
+ return swrap.libc.symbols._libc_fcntl.f (fd, cmd, va_arg (ap, long int));
}
#ifdef HAVE_FCNTL64
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;
+ return swrap.libc.symbols._libc_fcntl64.f (fd, cmd, va_arg (ap, long int));
}
#endif
diff --git a/src/vcl/ldp_socket_wrapper.h b/src/vcl/ldp_socket_wrapper.h
index 94529e3b744..0d167cf1aeb 100644
--- a/src/vcl/ldp_socket_wrapper.h
+++ b/src/vcl/ldp_socket_wrapper.h
@@ -122,7 +122,9 @@ int libc_eventfd (int count, int flags);
int libc_vfcntl (int fd, int cmd, va_list ap);
+#ifdef HAVE_FCNTL64
int libc_vfcntl64 (int fd, int cmd, va_list ap);
+#endif
int libc_vioctl (int fd, int cmd, va_list ap);