Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: native_client_sdk/src/libraries/nacl_io/syscalls/inet_aton.c

Issue 139283003: [NaCl SDK] nacl_io: Fix inet_ntop to be consistent with glibc. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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.
4
5 #include "nacl_io/ossocket.h"
6
7 #if defined(PROVIDES_SOCKET_API) && !defined(__GLIBC__)
8
9 #include <string.h>
10 #include <limits.h>
11
12 int inet_aton(const char *cp, struct in_addr *inp) {
13 unsigned int p1 = 0, p2 = 0, p3 = 0, p4 = 0;
14 int consumed = 0;
15 int matched = sscanf(cp, "%u.%u.%u.%u%n", &p1, &p2, &p3, &p4,
16 &consumed);
17
18 if (strlen(cp) == consumed && matched == 4) {
19 if ((p1 | p2 | p3 | p4) <= UCHAR_MAX) {
20 in_addr_t host_order_addr = (p1 << 24) | (p2 << 16) | (p3 << 8) | p4;
21 inp->s_addr = htonl(host_order_addr);
22 return 1;
23 }
24 }
25
26 matched = sscanf(cp, "%u.%u.%u%n", &p1, &p2, &p3, &consumed);
27 if (strlen(cp) == consumed && matched == 3) {
28 if ((p1 | p2) <= UCHAR_MAX && p3 <= USHRT_MAX) {
29 in_addr_t host_order_addr = (p1 << 24) | (p2 << 16) | p3;
30 inp->s_addr = htonl(host_order_addr);
31 return 1;
32 }
33 }
34
35 matched = sscanf(cp, "%u.%u%n", &p1, &p2, &consumed);
36 if (strlen(cp) == consumed && matched == 2) {
37 if (p1 <= UCHAR_MAX && p1 <= 1 << 24) {
38 in_addr_t host_order_addr = (p1 << 24) | p2;
39 inp->s_addr = htonl(host_order_addr);
40 return 1;
41 }
42 }
43
44 matched = sscanf(cp, "%u%n", &p1, &consumed);
45 if (strlen(cp) == consumed && matched == 1) {
46 inp->s_addr = htonl(p1);
47 return 1;
48 }
49
50 // Failure
51 return 0;
52 }
53
54 #endif // defined(PROVIDES_SOCKET_API) && !defined(__GLIBC__)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698