From afedb8c9e2889ffb0a9d858fd12634e075551c17 Mon Sep 17 00:00:00 2001 From: Ron Koenderink Date: Tue, 28 Aug 2007 21:06:22 +0000 Subject: [PATCH] (posix_accept, posix_bind, posix_listen, posix_setsockopt, posix_shutdown, posix_socket, socklen_t) [_WIN32]: Move socket related externs to sys/socket.h. (inet_ntop) [_WIN32]: Move extern to inet.h. (tcp_listen): Remove the !WIN32 includes and use the revised sys/socket.h, netinet/in.h, arpa/inet.h and netdb.h. --- src/lib/gen/tcp_listen.c | 2 - src/lib/w32/arpa/inet.h | 4 ++ src/lib/w32/netdb.h | 2 +- src/lib/w32/posixio.c | 3 +- src/lib/w32/sys/socket.h | 27 +++++++++++++ src/lib/w32/unistd.h | 87 +++++++++++++++++----------------------- 6 files changed, 70 insertions(+), 55 deletions(-) diff --git a/src/lib/gen/tcp_listen.c b/src/lib/gen/tcp_listen.c index ad951ed4d..212c4819d 100644 --- a/src/lib/gen/tcp_listen.c +++ b/src/lib/gen/tcp_listen.c @@ -40,11 +40,9 @@ #include #include #include -#if !defined(_WIN32) #include #include #include -#endif #include #include "prototypes.h" diff --git a/src/lib/w32/arpa/inet.h b/src/lib/w32/arpa/inet.h index 393d82620..5f403d0c7 100644 --- a/src/lib/w32/arpa/inet.h +++ b/src/lib/w32/arpa/inet.h @@ -35,4 +35,8 @@ #define ARPA_INET_H #include + +extern const char *inet_ntop(int af, const void *src, char *dst, + socklen_t cnt); + #endif /* ARPA_INET_H */ diff --git a/src/lib/w32/netdb.h b/src/lib/w32/netdb.h index bf1f28ba7..590e35e97 100644 --- a/src/lib/w32/netdb.h +++ b/src/lib/w32/netdb.h @@ -34,6 +34,6 @@ #ifndef NETDB_H #define NETDB_H -#include +#include "sys/socket.h" #include #endif /* NETDB_H */ diff --git a/src/lib/w32/posixio.c b/src/lib/w32/posixio.c index 68a296cb5..c833e7461 100644 --- a/src/lib/w32/posixio.c +++ b/src/lib/w32/posixio.c @@ -50,10 +50,11 @@ #include #include #include +#include "sys/socket.h" #include +#include #include "misc.h" -#include "sys/socket.h" #include "sys/uio.h" #include "unistd.h" diff --git a/src/lib/w32/sys/socket.h b/src/lib/w32/sys/socket.h index 81f290208..97cc0d416 100644 --- a/src/lib/w32/sys/socket.h +++ b/src/lib/w32/sys/socket.h @@ -37,4 +37,31 @@ #include #undef NS_ALL +#define EWOULDBLOCK WSAEWOULDBLOCK +#define ENOTSOCK WSAENOTSOCK +#define EAFNOSUPPORT WSAEAFNOSUPPORT + +typedef int socklen_t; + +#define accept(fd, addr, addrlen) \ + posix_accept((fd), (addr), (addrlen)) +#define bind(fd, name, namelen) \ + posix_bind((fd), (name), (namelen)) +#define listen(fd, backlog) \ + posix_listen((fd), (backlog)) +#define setsockopt(fd, level, optname, optval, optlen) \ + posix_setsockopt((fd), (level), (optname), (optval), (optlen)) +#define shutdown(fd, how) \ + posix_shutdown((fd), (how)) +#define socket(domain, type, protocol) \ + posix_socket((domain), (type), (protocol)) + +extern int posix_accept(int fd, struct sockaddr *addr, socklen_t *addrlen); +extern int posix_bind(int fd, const struct sockaddr *name, socklen_t namelen); +extern int posix_listen(int fd, int backlog); +extern int posix_setsockopt(int fd, int level, int optname, + const void *optval, socklen_t optlen); +extern int posix_shutdown(int fd, int how); +extern int posix_socket(int domain, int type, int protocol); + #endif /* SYS_SOCKET_H */ diff --git a/src/lib/w32/unistd.h b/src/lib/w32/unistd.h index 65fca5c60..2e4cb1ed1 100644 --- a/src/lib/w32/unistd.h +++ b/src/lib/w32/unistd.h @@ -31,15 +31,24 @@ * Ron Koenderink, 2007 */ +/* + * We can provide POSIX headers that don't exist in Windows, but we + * can't augment existing headers. Some stuff that should be in such + * headers ends up here, and some in w32misc.h. Can't be helped. + */ + #ifndef UNISTD_H #define UNISTD_H +/* + * We override system functions by defining them as macros. This + * breaks if the system's declaration is included later. Include them + * here. Major name space pollution, can't be helped. + */ #include #include #include -#include "sys/socket.h" #include -#include #include "w32misc.h" @@ -53,13 +62,14 @@ extern int optind, opterr, optopt; /* * posixfile.c */ +/* Should be in sys/stat.h */ #define mkdir(dir, perm) posix_mkdir((dir), (perm)) - extern int posix_mkdir(const char *dirname, mode_t perm); /* * posixio.c */ +/* Should be in sys/stat.h */ #ifndef S_IRUSR #define S_IRUSR _S_IREAD #define S_IWUSR _S_IWRITE @@ -78,47 +88,18 @@ extern int posix_mkdir(const char *dirname, mode_t perm); #define S_IXOTH 0 #define S_IRWXO S_IROTH | S_IWOTH | S_IXOTH #endif - -typedef int socklen_t; - -#define accept(fd, addr, addrlen) \ - posix_accept((fd), (addr), (addrlen)) -#define bind(fd, name, namelen) \ - posix_bind((fd), (name), (namelen)) -#define listen(fd, backlog) \ - posix_listen((fd), (backlog)) -#define setsockopt(fd, level, optname, optval, optlen) \ - posix_setsockopt((fd), (level), (optname), (optval), (optlen)) -#define shutdown(fd, how) \ - posix_shutdown((fd), (how)) -#define socket(domain, type, protocol) \ - posix_socket((domain), (type), (protocol)) - -#define close(fd) \ - posix_close((fd)) -#define creat(fname, pmode) \ - posix_open((fname), _O_WRONLY | _O_CREAT |_O_TRUNC, (pmode)) #define fstat(fd, buffer) \ posix_fstat((fd), (buffer)) -#define lseek(fd, offset, origin) \ - posix_lseek((fd), (offset), (origin)) -#define open(fname, oflag, ...) \ - posix_open((fname), (oflag), __VA_ARGS__) -#define read posix_read -#define write(fd, buffer, count) \ - posix_write((fd), (buffer), (count)) -#define fsync(fd) \ - posix_fsync((fd)) +extern int posix_fstat(int fd, struct stat *buffer); +/* Should be in fcntl.h */ #define O_NONBLOCK 1 + #define F_RDLCK 0 #define F_WRLCK 1 #define F_GETFL 1 #define F_SETFL 2 #define F_SETLK 3 -#define EWOULDBLOCK WSAEWOULDBLOCK -#define ENOTSOCK WSAENOTSOCK -#define EAFNOSUPPORT WSAEAFNOSUPPORT struct flock { @@ -128,27 +109,31 @@ struct flock off_t l_len; /* intentionally missing: pid_t l_pid */ }; +#define creat(fname, pmode) \ + posix_open((fname), _O_WRONLY | _O_CREAT |_O_TRUNC, (pmode)) +#define open(fname, oflag, ...) \ + posix_open((fname), (oflag), __VA_ARGS__) +extern int posix_open(const char *fname, int oflag, ...); -extern int posix_fd2socket(int fd); - -extern int posix_accept(int fd, struct sockaddr *addr, socklen_t *addrlen); -extern int posix_bind(int fd, const struct sockaddr *name, socklen_t namelen); -extern int posix_listen(int fd, int backlog); -extern int posix_setsockopt(int fd, int level, int optname, - const void *optval, socklen_t optlen); -extern int posix_shutdown(int fd, int how); -extern int posix_socket(int domain, int type, int protocol); -extern const char *inet_ntop(int af, const void *src, char *dst, - socklen_t cnt); - +/* Stuff that belongs here */ +#define close(fd) \ + posix_close((fd)) +#define lseek(fd, offset, origin) \ + posix_lseek((fd), (offset), (origin)) +#define read posix_read +#define write(fd, buffer, count) \ + posix_write((fd), (buffer), (count)) +#define fsync(fd) \ + posix_fsync((fd)) extern int posix_close(int fd); -extern int posix_fstat(int fd, struct stat *buffer); extern off_t posix_lseek(int fd, off_t offset, int origin); -extern int posix_open(const char *fname, int oflag, ...); extern ssize_t posix_read(int fd, void *buffer, size_t count); extern ssize_t posix_write(int fd, const void *buffer, size_t count); - -extern int posix_fileno(FILE *stream); extern int posix_fsync(int fd); extern int fcntl(int fd, int cmd, ...); + +/* Low-level stuff specific to the emulation */ +extern int posix_fd2socket(int fd); + #endif /* UNISTD_H */ +extern int posix_fileno(FILE *stream); -- 2.43.0