]> git.meshlink.io Git - catta/blobdiff - src/compat/windows/wincompat.h
fix mingw c compiler casting
[catta] / src / compat / windows / wincompat.h
index c736f75f938dc03868c75accbad1354239e21d37..7fe21f4a8bf410a9ab459a193f8a548c218157f0 100644 (file)
 #include <mswsock.h>
 
 
+// wrappers around WSAStartup/WSACleanup to avoid clutter
+void winsock_init(void);
+void winsock_exit(void);
+
+
+// the equivalent of strerror(errno) for Windows sockets
+char *errnostrsocket(void);
+
+
 // Winsock doesn't have recvmsg/sendmsg but offers the same functionality
 // with WSARecvMsg/WSASendMsg, so we implement the former in terms of the
 // latter.
@@ -47,14 +56,14 @@ struct msghdr {
 static inline struct cmsghdr *CMSG_FIRSTHDR(struct msghdr *m) {
     WSAMSG wm;
     wm.Control.len = m->msg_controllen;
-    wm.Control.buf = m->msg_control;
+    wm.Control.buf = (char*)m->msg_control;
     return WSA_CMSG_FIRSTHDR(&wm);
 }
 
 static inline struct cmsghdr *CMSG_NXTHDR(struct msghdr *m, struct cmsghdr *c) {
     WSAMSG wm;
     wm.Control.len = m->msg_controllen;
-    wm.Control.buf = m->msg_control;
+    wm.Control.buf = (char*)m->msg_control;
     return WSA_CMSG_NXTHDR(&wm, c);
 }
 
@@ -90,6 +99,11 @@ int ioctl(int d, unsigned long request, int *p);
 // something to give to WSAPoll, so we fake it with a local TCP socket. (ugh)
 int pipe(int pipefd[2]);
 
+// pipe(socket)-specific read/write/close equivalents
+#define closepipe closesocket
+#define writepipe(s,buf,len) send(s, buf, len, 0)
+#define readpipe(s,buf,len) recv(s, buf, len, 0)
+
 
 // Windows logically doesn't have uname, so we supply a replacement.