| Index: native_client_sdk/src/libraries/nacl_io/syscalls/inet_pton.c
|
| diff --git a/native_client_sdk/src/libraries/nacl_io/syscalls/inet_pton.c b/native_client_sdk/src/libraries/nacl_io/syscalls/inet_pton.c
|
| deleted file mode 100644
|
| index 3a74afdde468ae0da563c5a400f4bbd1463917bc..0000000000000000000000000000000000000000
|
| --- a/native_client_sdk/src/libraries/nacl_io/syscalls/inet_pton.c
|
| +++ /dev/null
|
| @@ -1,147 +0,0 @@
|
| -/* Copyright 2013 The Chromium Authors. All rights reserved.
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file. */
|
| -
|
| -#include "nacl_io/ossocket.h"
|
| -#if defined(PROVIDES_SOCKET_API) && !defined(__GLIBC__) && !defined(__BIONIC__)
|
| -
|
| -#include <ctype.h>
|
| -#include <errno.h>
|
| -#include <stdlib.h>
|
| -#include <string.h>
|
| -
|
| -#include "sdk_util/macros.h"
|
| -
|
| -enum {
|
| - kIpv4AddressSize = sizeof(in_addr_t),
|
| - kIpv6AddressSize = sizeof(struct in6_addr),
|
| -};
|
| -
|
| -/* Helper function for inet_pton() for IPv4 addresses. */
|
| -static int inet_pton_v4(const char* src, void* dst) {
|
| - const char* pos = src;
|
| - uint8_t result[kIpv4AddressSize] = {0};
|
| -
|
| - int i;
|
| - for (i = 0; i < kIpv4AddressSize; ++i) {
|
| - /* strtol() won't treat whitespace characters in the beginning as an error,
|
| - * so check to ensure this is started with digit before passing to strtol().
|
| - */
|
| - if (isspace((int)(*pos)))
|
| - return 0;
|
| - char* end_pos;
|
| - unsigned long value = strtoul(pos, &end_pos, 10);
|
| - if (value > 255 || pos == end_pos)
|
| - return 0;
|
| - result[i] = (unsigned char)value;
|
| - pos = end_pos;
|
| -
|
| - if (i < (kIpv4AddressSize - 1)) {
|
| - if (*pos != '.')
|
| - return 0;
|
| - ++pos;
|
| - }
|
| - }
|
| - if (*pos != '\0')
|
| - return 0;
|
| - memcpy(dst, result, sizeof(result));
|
| - return 1;
|
| -}
|
| -
|
| -/* Helper function for inet_pton() for IPv6 addresses. */
|
| -int inet_pton_v6(const char* src, void* dst) {
|
| - /* strtol() skips 0x in from of a number, while it's not allowed in IPv6
|
| - * addresses. Check that there is no 'x' in the string. */
|
| - const char* pos = src;
|
| - while (*pos != '\0') {
|
| - if (*pos == 'x')
|
| - return 0;
|
| - pos++;
|
| - }
|
| - pos = src;
|
| -
|
| - uint8_t result[kIpv6AddressSize];
|
| - memset(&result, 0, sizeof(result));
|
| - int double_colon_pos = -1;
|
| - int result_pos = 0;
|
| -
|
| - if (*pos == ':') {
|
| - if (*(pos + 1) != ':')
|
| - return 0;
|
| - pos += 2;
|
| - double_colon_pos = 0;
|
| - }
|
| -
|
| - while (*pos != '\0') {
|
| - /* strtol() won't treat whitespace characters in the beginning as an error,
|
| - * so check to ensure this is started with digit before passing to strtol().
|
| - */
|
| - if (isspace((int)(*pos)))
|
| - return 0;
|
| - char* end_pos;
|
| - unsigned long word = strtoul(pos, &end_pos, 16);
|
| - if (word > 0xffff || pos == end_pos)
|
| - return 0;
|
| -
|
| - if (*end_pos == '.') {
|
| - if (result_pos + kIpv4AddressSize > kIpv6AddressSize)
|
| - return 0;
|
| - /* Parse rest of address as IPv4 address. */
|
| - if (!inet_pton_v4(pos, result + result_pos))
|
| - return 0;
|
| - result_pos += 4;
|
| - break;
|
| - }
|
| -
|
| - if (result_pos > kIpv6AddressSize - 2)
|
| - return 0;
|
| - result[result_pos] = (word & 0xFF00) >> 8;
|
| - result[result_pos + 1] = word & 0xFF;
|
| - result_pos += 2;
|
| -
|
| - if (*end_pos == '\0')
|
| - break;
|
| -
|
| - if (*end_pos != ':')
|
| - return 0;
|
| -
|
| - pos = end_pos + 1;
|
| - if (*pos == ':') {
|
| - if (double_colon_pos != -1)
|
| - return 0;
|
| - double_colon_pos = result_pos;
|
| - ++pos;
|
| - }
|
| - }
|
| -
|
| - /* Finally move the data to the end in case the address contained '::'. */
|
| - if (result_pos < kIpv6AddressSize) {
|
| - if (double_colon_pos == -1)
|
| - return 0;
|
| - int move_size = result_pos - double_colon_pos;
|
| - int gap_size = kIpv6AddressSize - result_pos;
|
| - memmove(result + kIpv6AddressSize - move_size,
|
| - result + double_colon_pos, move_size);
|
| - memset(result + double_colon_pos, 0, gap_size);
|
| - }
|
| -
|
| - /* Finally copy the result to the output buffer. */
|
| - memcpy(dst, result, sizeof(result));
|
| -
|
| - return 1;
|
| -}
|
| -
|
| -int inet_pton(int af, const char *src, void *dst) {
|
| - if (!src || !dst) {
|
| - return 0;
|
| - }
|
| - if (af == AF_INET) {
|
| - return inet_pton_v4(src, dst);
|
| - } else if (af == AF_INET6) {
|
| - return inet_pton_v6(src, dst);
|
| - }
|
| - errno = EAFNOSUPPORT;
|
| - return -1;
|
| -}
|
| -
|
| -#endif /* defined(PROVIDES_SOCKET_API) && !defined(__GLIBC__) ... */
|
|
|