1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "nacl_io/ossocket.h"
7 #if defined(PROVIDES_SOCKET_API) && !defined(__GLIBC__)
13 int inet_aton(const char *cp
, struct in_addr
*inp
) {
14 unsigned int p1
= 0, p2
= 0, p3
= 0, p4
= 0;
16 int matched
= sscanf(cp
, "%u.%u.%u.%u%n", &p1
, &p2
, &p3
, &p4
,
19 if (strlen(cp
) == consumed
&& matched
== 4) {
20 if ((p1
| p2
| p3
| p4
) <= UCHAR_MAX
) {
21 in_addr_t host_order_addr
= (p1
<< 24) | (p2
<< 16) | (p3
<< 8) | p4
;
22 inp
->s_addr
= htonl(host_order_addr
);
27 matched
= sscanf(cp
, "%u.%u.%u%n", &p1
, &p2
, &p3
, &consumed
);
28 if (strlen(cp
) == consumed
&& matched
== 3) {
29 if ((p1
| p2
) <= UCHAR_MAX
&& p3
<= USHRT_MAX
) {
30 in_addr_t host_order_addr
= (p1
<< 24) | (p2
<< 16) | p3
;
31 inp
->s_addr
= htonl(host_order_addr
);
36 matched
= sscanf(cp
, "%u.%u%n", &p1
, &p2
, &consumed
);
37 if (strlen(cp
) == consumed
&& matched
== 2) {
38 if (p1
<= UCHAR_MAX
&& p1
<= 1 << 24) {
39 in_addr_t host_order_addr
= (p1
<< 24) | p2
;
40 inp
->s_addr
= htonl(host_order_addr
);
45 matched
= sscanf(cp
, "%u%n", &p1
, &consumed
);
46 if (strlen(cp
) == consumed
&& matched
== 1) {
47 inp
->s_addr
= htonl(p1
);
55 #endif // defined(PROVIDES_SOCKET_API) && !defined(__GLIBC__)