12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (c) 1999 Kungliga Tekniska H�gskolan 32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * (Royal Institute of Technology, Stockholm, Sweden). 42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * All rights reserved. 52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Redistribution and use in source and binary forms, with or without 72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * modification, are permitted provided that the following conditions 82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * are met: 92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * notice, this list of conditions and the following disclaimer. 122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * documentation and/or other materials provided with the distribution. 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 3. All advertising materials mentioning features or use of this software 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * must display the following acknowledgement: 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * This product includes software developed by the Kungliga Tekniska 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * H�gskolan and its contributors. 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 4. Neither the name of the Institute nor the names of its contributors 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * may be used to endorse or promote products derived from this software 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * without specific prior written permission. 252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * SUCH DAMAGE. 372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* $Id: inet_ntop.c,v 1.8 2005/02/09 02:25:46 guy Exp $ */ 402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef lint 422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char rcsid[] _U_ = 432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "@(#) $Header: /tcpdump/master/tcpdump/missing/inet_ntop.c,v 1.8 2005/02/09 02:25:46 guy Exp $"; 442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <tcpdump-stdinc.h> 472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdio.h> 492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <errno.h> 502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef IN6ADDRSZ 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IN6ADDRSZ 16 /* IPv6 T_AAAA */ 572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef INT16SZ 602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define INT16SZ 2 /* word size */ 612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char * 642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectinet_ntop_v4 (const void *src, char *dst, size_t size) 652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char digits[] = "0123456789"; 672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i; 682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct in_addr *addr = (struct in_addr *)src; 692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_long a = ntohl(addr->s_addr); 702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *orig_dst = dst; 712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (size < INET_ADDRSTRLEN) { 732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project errno = ENOSPC; 742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < 4; ++i) { 772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int n = (a >> (24 - i * 8)) & 0xFF; 782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int non_zerop = 0; 792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (non_zerop || n / 100 > 0) { 812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *dst++ = digits[n / 100]; 822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project n %= 100; 832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project non_zerop = 1; 842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (non_zerop || n / 10 > 0) { 862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *dst++ = digits[n / 10]; 872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project n %= 10; 882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project non_zerop = 1; 892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *dst++ = digits[n]; 912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i != 3) 922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *dst++ = '.'; 932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *dst++ = '\0'; 952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return orig_dst; 962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Convert IPv6 binary address into presentation (printable) format. 1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char * 1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectinet_ntop_v6 (const u_char *src, char *dst, size_t size) 1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Note that int32_t and int16_t need only be "at least" large enough 1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * to contain a value of the specified size. On some systems, like 1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Crays, there is no such thing as an integer variable with 16 bits. 1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Keep this in mind if you think this function should have been coded 1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * to use pointer overlays. All the world's not a VAX. 1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char tmp [INET6_ADDRSTRLEN+1]; 1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *tp; 1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct { 1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project long base; 1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project long len; 1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } best, cur; 1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_long words [IN6ADDRSZ / INT16SZ]; 1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i; 1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Preprocess: 1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copy the input (bytewise) array into a wordwise array. 1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Find the longest run of 0x00's in src[] for :: shorthanding. 1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project memset (words, 0, sizeof(words)); 1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < IN6ADDRSZ; i++) 1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project words[i/2] |= (src[i] << ((1 - (i % 2)) << 3)); 1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project best.base = -1; 1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project cur.base = -1; 1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++) 1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (words[i] == 0) 1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (cur.base == -1) 1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project cur.base = i, cur.len = 1; 1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else cur.len++; 1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (cur.base != -1) 1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (best.base == -1 || cur.len > best.len) 1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project best = cur; 1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project cur.base = -1; 1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if ((cur.base != -1) && (best.base == -1 || cur.len > best.len)) 1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project best = cur; 1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (best.base != -1 && best.len < 2) 1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project best.base = -1; 1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Format the result. 1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = tmp; 1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++) 1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Are we inside the best run of 0x00's? 1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (best.base != -1 && i >= best.base && i < (best.base + best.len)) 1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i == best.base) 1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *tp++ = ':'; 1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project continue; 1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Are we following an initial run of 0x00s or any real hex? 1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i != 0) 1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *tp++ = ':'; 1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Is this address an encapsulated IPv4? 1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i == 6 && best.base == 0 && 1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (best.len == 6 || (best.len == 5 && words[5] == 0xffff))) 1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!inet_ntop_v4(src+12, tp, sizeof(tmp) - (tp - tmp))) 1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project errno = ENOSPC; 1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (NULL); 1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp += strlen(tp); 1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp += sprintf (tp, "%lX", words[i]); 1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Was it a trailing run of 0x00's? 1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (best.base != -1 && (best.base + best.len) == (IN6ADDRSZ / INT16SZ)) 1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *tp++ = ':'; 1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *tp++ = '\0'; 1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Check for overflow, copy, and we're done. 1932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if ((size_t)(tp - tmp) > size) 1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project errno = ENOSPC; 1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (NULL); 1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return strcpy (dst, tmp); 2002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (NULL); 2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* INET6 */ 2032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst char * 2062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectinet_ntop(int af, const void *src, char *dst, size_t size) 2072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (af) { 2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case AF_INET : 2102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return inet_ntop_v4 (src, dst, size); 2112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 2122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case AF_INET6: 2132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return inet_ntop_v6 ((const u_char*)src, dst, size); 2142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default : 2162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project errno = EAFNOSUPPORT; 2172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 2182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 220