Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove redundant MinGW inet_ntop and inet_pton, fix INVALID_SOCKET tautology #122

Merged
merged 1 commit into from
Mar 11, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
187 changes: 1 addition & 186 deletions netcode.c
Original file line number Diff line number Diff line change
Expand Up @@ -180,191 +180,6 @@ void netcode_default_free_function( void * context, void * pointer )

#endif

// ----------------------------------------------------------------

#ifdef __MINGW32__
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt)
{
if ( af == AF_INET )
{
struct sockaddr_in in;
memset(&in, 0, sizeof(in));
in.sin_family = AF_INET;
memcpy(&in.sin_addr, src, sizeof(struct in_addr));
getnameinfo((struct sockaddr *)&in, sizeof(struct sockaddr_in), dst, cnt, NULL, 0, NI_NUMERICHOST);
return dst;
}
else if ( af == AF_INET6 )
{
struct sockaddr_in6 in;
memset(&in, 0, sizeof(in));
in.sin6_family = AF_INET6;
memcpy(&in.sin6_addr, src, sizeof(struct in_addr6));
getnameinfo((struct sockaddr *)&in, sizeof(struct sockaddr_in6), dst, cnt, NULL, 0, NI_NUMERICHOST);
return dst;
}

return NULL;
}

#define NS_INADDRSZ 4
#define NS_IN6ADDRSZ 16
#define NS_INT16SZ 2

int inet_pton4(const char *src, char *dst)
{
uint8_t tmp[NS_INADDRSZ], *tp;
int saw_digit = 0;
int octets = 0;
*(tp = tmp) = 0;
int ch;

while ((ch = *src++) != '\0')
{
if ( ch >= '0' && ch <= '9' )
{
uint32_t n = *tp * 10 + (ch - '0');

if ( saw_digit && *tp == 0 )
return 0;
if ( n > 255 )
return 0;
*tp = n;
if ( !saw_digit )
{
if ( ++octets > 4 )
return 0;
saw_digit = 1;
}
}
else if ( ch == '.' && saw_digit )
{
if ( octets == 4 )
return 0;
*++tp = 0;
saw_digit = 0;
}
else
return 0;
}
if ( octets < 4 )
return 0;

memcpy(dst, tmp, NS_INADDRSZ);

return 1;
}

int inet_pton6(const char *src, char *dst)
{
static const char xdigits[] = "0123456789abcdef";
uint8_t tmp[NS_IN6ADDRSZ];
uint8_t *tp = (uint8_t*) memset(tmp, '\0', NS_IN6ADDRSZ);
uint8_t *endp = tp + NS_IN6ADDRSZ;
uint8_t *colonp = NULL;

// Leading :: requires some special handling
if ( *src == ':' )
{
if ( *++src != ':' )
return 0;
}

const char *curtok = src;
int saw_xdigit = 0;
uint32_t val = 0;
int ch;

while ( (ch = tolower(*src++)) != '\0' )
{
const char *pch = strchr(xdigits, ch);
if ( pch != NULL )
{
val <<= 4;
val |= (pch - xdigits);
if ( val > 0xffff )
return 0;
saw_xdigit = 1;
continue;
}
if ( ch == ':' )
{
curtok = src;
if ( !saw_xdigit )
{
if ( colonp )
return 0;
colonp = tp;
continue;
}
else if ( *src == '\0' )
{
return 0;
}
if ( tp + NS_INT16SZ > endp )
return 0;
*tp++ = (uint8_t) (val >> 8) & 0xff;
*tp++ = (uint8_t) val & 0xff;
saw_xdigit = 0;
val = 0;
continue;
}
if ( ch == '.' && ((tp + NS_INADDRSZ) <= endp) && inet_pton4(curtok, (char*) tp) > 0 )
{
tp += NS_INADDRSZ;
saw_xdigit = 0;
break;
}
return 0;
}

if ( saw_xdigit )
{
if ( tp + NS_INT16SZ > endp )
return 0;
*tp++ = (uint8_t) (val >> 8) & 0xff;
*tp++ = (uint8_t) val & 0xff;
}

if ( colonp != NULL )
{
const int n = tp - colonp;
if ( tp == endp )
return 0;
for (int i = 1; i <= n; i++)
{
endp[-i] = colonp[n - i];
colonp[n - i] = 0;
}
tp = endp;
}
if ( tp != endp )
return 0;

memcpy(dst, tmp, NS_IN6ADDRSZ);

return 1;
}

int inet_pton(int af, const char *src, void *dst)
{
switch ( af )
{
case AF_INET:
return inet_pton4(src, (char *) dst);

case AF_INET6:
return inet_pton6(src, (char *) dst);

default:
return -1;
}
}

#endif

// ----------------------------------------------------------------

int netcode_parse_address( NETCODE_CONST char * address_string_in, struct netcode_address_t * address )
{
netcode_assert( address_string_in );
Expand Down Expand Up @@ -645,7 +460,7 @@ int netcode_socket_create( struct netcode_socket_t * s, struct netcode_address_t
s->handle = socket( ( address->type == NETCODE_ADDRESS_IPV6 ) ? AF_INET6 : AF_INET, SOCK_DGRAM, IPPROTO_UDP );

#if NETCODE_PLATFORM == NETCODE_PLATFORM_WINDOWS
if ( s->handle == INVALID_SOCKET )
if ( s->handle == (uint32_t)INVALID_SOCKET )
#else // #if NETCODE_PLATFORM == NETCODE_PLATFORM_WINDOWS
if ( s->handle <= 0 )
#endif // #if NETCODE_PLATFORM == NETCODE_PLATFORM_WINDOWS
Expand Down
Loading