chiark / gitweb /
test: udp-preload: Provide close
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 12 Oct 2019 12:09:37 +0000 (13:09 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 12 Oct 2019 22:29:26 +0000 (23:29 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
test/udp-preload.c

index c4bf49d54a87ddc4c2cc3c3d7ec2859af9af6b40..653dfa57c01f6b74a69e3c57bd2a98a15a8cbc2c 100644 (file)
@@ -58,12 +58,14 @@ static anyfn_type *find_any(const char *name) {
 }
 
 #define socket_args int domain, int type, int protocol
+#define close_args  int fd
 #define bind_args   int fd, const struct sockaddr *addr, socklen_t addrlen
 #define setsockopt_args  int fd, int level, int optname, \
                          const void *optval, socklen_t optlen
 #define getsockname_args int fd, struct sockaddr *addr, socklen_t *addrlen
 #define WRAPS(X)                                       \
     X(socket,     (domain,type,protocol))              \
+    X(close,      (fd))                                        \
     X(bind,       (fd,addr,addrlen))                   \
     X(setsockopt, (fd,level,optname,optval,optlen))    \
     X(getsockname,(fd,addr,addrlen))
@@ -180,6 +182,14 @@ WRAP(socket) {
     return -1;
 }
 
+WRAP(close) {
+    if (fd<tablesz) {
+       free(table[fd]);
+       table[fd]=0;
+    }
+    return old_close(fd);
+}
+
 WRAP(bind) {
     fdinfo *ent=lookup(fd);
     if (!ent) return old_bind(fd,addr,addrlen);