[PATCH v2] ws2_32: Base inet_addr() implementation on musl.
Zebediah Figura (she/her)
zfigura at codeweavers.com
Wed Mar 2 14:14:39 CST 2022
On 3/2/22 08:58, Paul Gofman wrote:
> The imported algorithm modified to match the tests.
>
> Fixes a regression introduced by commit
> 671cf16f773e5dafc7edbf7766aed9e52e4e7b56.
>
> Windows inet_addr() behaves basically the same as Unix
> inet_addr() which is different from inet_pton().
>
> Signed-off-by: Paul Gofman <pgofman at codeweavers.com>
> ---
> v2:
> - add TRACE();
> - formatting.
>
> dlls/ws2_32/protocol.c | 51 +++++++++++++++++++++--
> dlls/ws2_32/tests/protocol.c | 80 ++++++++++++++++++++++++++++++++++++
> 2 files changed, 127 insertions(+), 4 deletions(-)
>
While you're at it, would you mind removing the existing, broken tests
for inet_addr() from test_inet_pton()? Or I can send a followup patch to
remove those...
> diff --git a/dlls/ws2_32/protocol.c b/dlls/ws2_32/protocol.c
> index 0f56b1604d8..3194fff93cd 100644
> --- a/dlls/ws2_32/protocol.c
> +++ b/dlls/ws2_32/protocol.c
> @@ -1834,17 +1834,60 @@ int WINAPI WSAAddressToStringW( struct sockaddr *addr, DWORD addr_len,
> return 0;
> }
>
> -
> /***********************************************************************
> * inet_addr (ws2_32.11)
> */
> u_long WINAPI inet_addr( const char *str )
> {
> + unsigned long a[4] = { 0 };
> + const char *s = str;
> + unsigned char *d;
> + unsigned int i;
> u_long addr;
> + char *z;
> +
> + TRACE( "str %s.\n", debugstr_a(str) );
> +
> + if (!s)
> + {
> + SetLastError( WSAEFAULT );
> + return INADDR_NONE;
> + }
> +
> + d = (unsigned char *)&addr;
> +
> + if (s[0] == ' ' && !s[1]) return 0;
>
> - if (inet_pton( AF_INET, str, &addr ) == 1)
> - return addr;
> - return INADDR_NONE;
> + for (i = 0; i < 4; ++i)
> + {
> + a[i] = strtoul( s, &z, 0 );
> + if (z == s || !isdigit( *s )) return INADDR_NONE;
> + if (!*z || *z == ' ') break;
A quick test implies that \t is valid here as well; tests for other
whitespace characters would probably be useful.
> + if (*z != '.') return INADDR_NONE;
> + s = z + 1;
> +
More information about the wine-devel
mailing list