Mercurial > games > semicongine
comparison fuhtark_test/include/winapi/wspiapi.h @ 1500:91c8c3b7cbf0
add: futhark tests for generating vulkan api
| author | sam <sam@basx.dev> |
|---|---|
| date | Wed, 26 Nov 2025 21:36:48 +0700 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1499:1f58458b7ef7 | 1500:91c8c3b7cbf0 |
|---|---|
| 1 /** | |
| 2 * This file has no copyright assigned and is placed in the Public Domain. | |
| 3 * This file is part of the w64 mingw-runtime package. | |
| 4 * No warranty is given; refer to the file DISCLAIMER within this package. | |
| 5 */ | |
| 6 #ifndef _WSPIAPI_H_ | |
| 7 #define _WSPIAPI_H_ | |
| 8 | |
| 9 #include <stdio.h> | |
| 10 #include <stdlib.h> | |
| 11 #include <malloc.h> | |
| 12 #include <string.h> | |
| 13 #include <ws2tcpip.h> | |
| 14 | |
| 15 #include <_mingw_print_push.h> | |
| 16 | |
| 17 #define _WSPIAPI_STRCPY_S(_Dst,_Size,_Src) strcpy((_Dst),(_Src)) | |
| 18 #define _WSPIAPI_STRCAT_S(_Dst,_Size,_Src) strcat((_Dst),(_Src)) | |
| 19 #define _WSPIAPI_STRNCPY_S(_Dst,_Size,_Src,_Count) strncpy((_Dst),(_Src),(_Count)); (_Dst)[(_Size) - 1] = 0 | |
| 20 #define _WSPIAPI_SPRINTF_S_1(_Dst,_Size,_Format,_Arg1) sprintf((_Dst),(_Format),(_Arg1)) | |
| 21 | |
| 22 #ifndef _WSPIAPI_COUNTOF | |
| 23 #ifndef __cplusplus | |
| 24 #define _WSPIAPI_COUNTOF(_Array) (sizeof(_Array) / sizeof(_Array[0])) | |
| 25 #else | |
| 26 template <typename __CountofType,size_t _N> char (&__wspiapi_countof_helper(__CountofType (&_Array)[_N]))[_N]; | |
| 27 #define _WSPIAPI_COUNTOF(_Array) sizeof(__wspiapi_countof_helper(_Array)) | |
| 28 #endif | |
| 29 #endif | |
| 30 | |
| 31 #define WspiapiMalloc(tSize) calloc(1,(tSize)) | |
| 32 #define WspiapiFree(p) free(p) | |
| 33 #define WspiapiSwap(a,b,c) { (c) = (a); (a) = (b); (b) = (c); } | |
| 34 #define getaddrinfo WspiapiGetAddrInfo | |
| 35 #define getnameinfo WspiapiGetNameInfo | |
| 36 #define freeaddrinfo WspiapiFreeAddrInfo | |
| 37 | |
| 38 typedef int (WINAPI *WSPIAPI_PGETADDRINFO)(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res); | |
| 39 typedef int (WINAPI *WSPIAPI_PGETNAMEINFO)(const struct sockaddr *sa,socklen_t salen,char *host,size_t hostlen,char *serv,size_t servlen,int flags); | |
| 40 typedef void (WINAPI *WSPIAPI_PFREEADDRINFO)(struct addrinfo *ai); | |
| 41 | |
| 42 #ifdef __cplusplus | |
| 43 extern "C" { | |
| 44 #endif | |
| 45 typedef struct { | |
| 46 char const *pszName; | |
| 47 FARPROC pfAddress; | |
| 48 } WSPIAPI_FUNCTION; | |
| 49 | |
| 50 #define WSPIAPI_FUNCTION_ARRAY { { "getaddrinfo",(FARPROC) WspiapiLegacyGetAddrInfo }, \ | |
| 51 { "getnameinfo",(FARPROC) WspiapiLegacyGetNameInfo }, \ | |
| 52 { "freeaddrinfo",(FARPROC) WspiapiLegacyFreeAddrInfo } } | |
| 53 | |
| 54 char *WINAPI WspiapiStrdup (const char *pszString); | |
| 55 WINBOOL WINAPI WspiapiParseV4Address (const char *pszAddress,PDWORD pdwAddress); | |
| 56 struct addrinfo * WINAPI WspiapiNewAddrInfo (int iSocketType,int iProtocol,WORD wPort,DWORD dwAddress); | |
| 57 int WINAPI WspiapiQueryDNS (const char *pszNodeName,int iSocketType,int iProtocol,WORD wPort,char pszAlias[NI_MAXHOST],struct addrinfo **pptResult); | |
| 58 int WINAPI WspiapiLookupNode (const char *pszNodeName,int iSocketType,int iProtocol,WORD wPort,WINBOOL bAI_CANONNAME,struct addrinfo **pptResult); | |
| 59 int WINAPI WspiapiClone (WORD wPort,struct addrinfo *ptResult); | |
| 60 void WINAPI WspiapiLegacyFreeAddrInfo (struct addrinfo *ptHead); | |
| 61 int WINAPI WspiapiLegacyGetAddrInfo(const char *pszNodeName,const char *pszServiceName,const struct addrinfo *ptHints,struct addrinfo **pptResult); | |
| 62 int WINAPI WspiapiLegacyGetNameInfo(const struct sockaddr *ptSocketAddress,socklen_t tSocketLength,char *pszNodeName,size_t tNodeLength,char *pszServiceName,size_t tServiceLength,int iFlags); | |
| 63 FARPROC WINAPI WspiapiLoad(WORD wFunction); | |
| 64 int WINAPI WspiapiGetAddrInfo(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res); | |
| 65 int WINAPI WspiapiGetNameInfo (const struct sockaddr *sa,socklen_t salen,char *host,size_t hostlen,char *serv,size_t servlen,int flags); | |
| 66 void WINAPI WspiapiFreeAddrInfo (struct addrinfo *ai); | |
| 67 | |
| 68 #ifndef __CRT__NO_INLINE | |
| 69 __CRT_INLINE char * WINAPI | |
| 70 WspiapiStrdup (const char *pszString) | |
| 71 { | |
| 72 char *rstr; | |
| 73 size_t szlen; | |
| 74 | |
| 75 if(!pszString) | |
| 76 return NULL; | |
| 77 szlen = strlen(pszString) + 1; | |
| 78 rstr = (char *) WspiapiMalloc (szlen); | |
| 79 if (!rstr) | |
| 80 return NULL; | |
| 81 strcpy (rstr, pszString); | |
| 82 return rstr; | |
| 83 } | |
| 84 | |
| 85 __CRT_INLINE WINBOOL WINAPI | |
| 86 WspiapiParseV4Address (const char *pszAddress, PDWORD pdwAddress) | |
| 87 { | |
| 88 DWORD dwAddress = 0; | |
| 89 const char *h = NULL; | |
| 90 int cnt; | |
| 91 | |
| 92 for (cnt = 0,h = pszAddress; *h != 0; h++) | |
| 93 if (h[0] == '.') | |
| 94 cnt++; | |
| 95 if (cnt != 3) | |
| 96 return FALSE; | |
| 97 dwAddress = inet_addr (pszAddress); | |
| 98 if (dwAddress == INADDR_NONE) | |
| 99 return FALSE; | |
| 100 *pdwAddress = dwAddress; | |
| 101 return TRUE; | |
| 102 } | |
| 103 | |
| 104 __CRT_INLINE struct addrinfo * WINAPI | |
| 105 WspiapiNewAddrInfo (int iSocketType,int iProtocol, WORD wPort,DWORD dwAddress) | |
| 106 { | |
| 107 struct addrinfo *n; | |
| 108 struct sockaddr_in *pa; | |
| 109 | |
| 110 if ((n = (struct addrinfo *) WspiapiMalloc (sizeof (struct addrinfo))) == NULL) | |
| 111 return NULL; | |
| 112 if ((pa = (struct sockaddr_in *) WspiapiMalloc (sizeof(struct sockaddr_in))) == NULL) | |
| 113 { | |
| 114 WspiapiFree(n); | |
| 115 return NULL; | |
| 116 } | |
| 117 pa->sin_family = AF_INET; | |
| 118 pa->sin_port = wPort; | |
| 119 pa->sin_addr.s_addr = dwAddress; | |
| 120 n->ai_family = PF_INET; | |
| 121 n->ai_socktype = iSocketType; | |
| 122 n->ai_protocol = iProtocol; | |
| 123 n->ai_addrlen = sizeof (struct sockaddr_in); | |
| 124 n->ai_addr = (struct sockaddr *) pa; | |
| 125 return n; | |
| 126 } | |
| 127 | |
| 128 __CRT_INLINE int WINAPI | |
| 129 WspiapiLookupNode (const char *pszNodeName, int iSocketType, int iProtocol, WORD wPort, | |
| 130 WINBOOL bAI_CANONNAME, struct addrinfo **pptResult) | |
| 131 { | |
| 132 int err = 0, cntAlias = 0; | |
| 133 char name[NI_MAXHOST] = ""; | |
| 134 char alias[NI_MAXHOST] = ""; | |
| 135 char *pname = name, *palias = alias, *tmp = NULL; | |
| 136 | |
| 137 strncpy (pname, pszNodeName, NI_MAXHOST - 1); | |
| 138 pname[NI_MAXHOST - 1] = 0; | |
| 139 for (;;) | |
| 140 { | |
| 141 err = WspiapiQueryDNS (pszNodeName, iSocketType, iProtocol, wPort, palias, pptResult); | |
| 142 if (err) | |
| 143 break; | |
| 144 if (*pptResult) | |
| 145 break; | |
| 146 ++cntAlias; | |
| 147 if (strlen (palias) == 0 || !strcmp (pname, palias) || cntAlias == 16) | |
| 148 { | |
| 149 err = EAI_FAIL; | |
| 150 break; | |
| 151 } | |
| 152 WspiapiSwap(pname, palias, tmp); | |
| 153 } | |
| 154 if (!err && bAI_CANONNAME) | |
| 155 { | |
| 156 (*pptResult)->ai_canonname = WspiapiStrdup (palias); | |
| 157 if (!(*pptResult)->ai_canonname) | |
| 158 err = EAI_MEMORY; | |
| 159 } | |
| 160 return err; | |
| 161 } | |
| 162 | |
| 163 __CRT_INLINE int WINAPI | |
| 164 WspiapiClone (WORD wPort,struct addrinfo *ptResult) | |
| 165 { | |
| 166 struct addrinfo *p = NULL; | |
| 167 struct addrinfo *n = NULL; | |
| 168 | |
| 169 for (p = ptResult; p != NULL;) | |
| 170 { | |
| 171 n = WspiapiNewAddrInfo (SOCK_DGRAM, p->ai_protocol, wPort, | |
| 172 ((struct sockaddr_in *) p->ai_addr)->sin_addr.s_addr); | |
| 173 if (!n) | |
| 174 break; | |
| 175 n->ai_next = p->ai_next; | |
| 176 p->ai_next = n; | |
| 177 p = n->ai_next; | |
| 178 } | |
| 179 if (p != NULL) | |
| 180 return EAI_MEMORY; | |
| 181 return 0; | |
| 182 } | |
| 183 | |
| 184 __CRT_INLINE void WINAPI | |
| 185 WspiapiLegacyFreeAddrInfo (struct addrinfo *ptHead) | |
| 186 { | |
| 187 struct addrinfo *p; | |
| 188 | |
| 189 for (p = ptHead; p != NULL; p = ptHead) | |
| 190 { | |
| 191 if (p->ai_canonname) | |
| 192 WspiapiFree (p->ai_canonname); | |
| 193 if (p->ai_addr) | |
| 194 WspiapiFree (p->ai_addr); | |
| 195 ptHead = p->ai_next; | |
| 196 WspiapiFree (p); | |
| 197 } | |
| 198 } | |
| 199 #endif /* !__CRT__NO_INLINE */ | |
| 200 | |
| 201 #ifdef __cplusplus | |
| 202 } | |
| 203 #endif | |
| 204 | |
| 205 #include <_mingw_print_pop.h> | |
| 206 | |
| 207 #endif |
