projects
/
gnulib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
New module 'integer_length'.
[gnulib.git]
/
lib
/
inet_ntop.c
diff --git
a/lib/inet_ntop.c
b/lib/inet_ntop.c
index
8329c82
..
6b80174
100644
(file)
--- a/
lib/inet_ntop.c
+++ b/
lib/inet_ntop.c
@@
-1,5
+1,6
@@
/* inet_ntop.c -- convert IPv4 and IPv6 addresses from binary to text form
/* inet_ntop.c -- convert IPv4 and IPv6 addresses from binary to text form
- Copyright (c) 2005, 2006 Free Software Foundation, Inc.
+
+ Copyright (C) 2005-2006, 2008-2011 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@
-32,59
+33,66
@@
* SOFTWARE.
*/
* SOFTWARE.
*/
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
/* Specification. */
/* Specification. */
-#include
"inet_ntop.h"
+#include
<arpa/inet.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
+#if HAVE_DECL_INET_NTOP
-#ifndef EAFNOSUPPORT
-# define EAFNOSUPPORT EINVAL
-#endif
+# undef inet_ntop
+
+const char *
+rpl_inet_ntop (int af, const void *restrict src,
+ char *restrict dst, socklen_t cnt)
+{
+ return inet_ntop (af, src, dst, cnt);
+}
-#define NS_IN6ADDRSZ 16
-#define NS_INT16SZ 2
+#else
+
+# include <stdio.h>
+# include <string.h>
+# include <errno.h>
+
+# define NS_IN6ADDRSZ 16
+# define NS_INT16SZ 2
/*
* WARNING: Don't even consider trying to compile this on a system where
* sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX.
*/
/*
* WARNING: Don't even consider trying to compile this on a system where
* sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX.
*/
-typedef int verify_int_size[
2 * sizeof (int) - 7
];
+typedef int verify_int_size[
4 <= sizeof (int) ? 1 : -1
];
static const char *inet_ntop4 (const unsigned char *src, char *dst, socklen_t size);
static const char *inet_ntop4 (const unsigned char *src, char *dst, socklen_t size);
-#if HAVE_IPV6
+#
if HAVE_IPV6
static const char *inet_ntop6 (const unsigned char *src, char *dst, socklen_t size);
static const char *inet_ntop6 (const unsigned char *src, char *dst, socklen_t size);
-#endif
+#
endif
/* char *
* inet_ntop(af, src, dst, size)
/* char *
* inet_ntop(af, src, dst, size)
- * convert a network format address to presentation format.
+ *
convert a network format address to presentation format.
* return:
* return:
- * pointer to presentation format address (`dst'), or NULL (see errno).
+ *
pointer to presentation format address (`dst'), or NULL (see errno).
* author:
* author:
- * Paul Vixie, 1996.
+ *
Paul Vixie, 1996.
*/
const char *
inet_ntop (int af, const void *restrict src,
*/
const char *
inet_ntop (int af, const void *restrict src,
- char *restrict dst, socklen_t cnt)
+
char *restrict dst, socklen_t cnt)
{
switch (af)
{
{
switch (af)
{
-#if HAVE_IPV4
+#
if HAVE_IPV4
case AF_INET:
return (inet_ntop4 (src, dst, cnt));
case AF_INET:
return (inet_ntop4 (src, dst, cnt));
-#endif
+#
endif
-#if HAVE_IPV6
+#
if HAVE_IPV6
case AF_INET6:
return (inet_ntop6 (src, dst, cnt));
case AF_INET6:
return (inet_ntop6 (src, dst, cnt));
-#endif
+#
endif
default:
errno = EAFNOSUPPORT;
default:
errno = EAFNOSUPPORT;
@@
-95,14
+103,14
@@
inet_ntop (int af, const void *restrict src,
/* const char *
* inet_ntop4(src, dst, size)
/* const char *
* inet_ntop4(src, dst, size)
- * format an IPv4 address
+ *
format an IPv4 address
* return:
* return:
- * `dst' (as a const)
+ *
`dst' (as a const)
* notes:
* notes:
- * (1) uses no statics
- * (2) takes a u_char* not an in_addr as input
+ *
(1) uses no statics
+ *
(2) takes a u_char* not an in_addr as input
* author:
* author:
- * Paul Vixie, 1996.
+ *
Paul Vixie, 1996.
*/
static const char *
inet_ntop4 (const unsigned char *src, char *dst, socklen_t size)
*/
static const char *
inet_ntop4 (const unsigned char *src, char *dst, socklen_t size)
@@
-123,13
+131,13
@@
inet_ntop4 (const unsigned char *src, char *dst, socklen_t size)
return strcpy (dst, tmp);
}
return strcpy (dst, tmp);
}
-#if HAVE_IPV6
+#
if HAVE_IPV6
/* const char *
* inet_ntop6(src, dst, size)
/* const char *
* inet_ntop6(src, dst, size)
- * convert IPv6 binary address into presentation (printable) format
+ *
convert IPv6 binary address into presentation (printable) format
* author:
* author:
- * Paul Vixie, 1996.
+ *
Paul Vixie, 1996.
*/
static const char *
inet_ntop6 (const unsigned char *src, char *dst, socklen_t size)
*/
static const char *
inet_ntop6 (const unsigned char *src, char *dst, socklen_t size)
@@
-162,26
+170,26
@@
inet_ntop6 (const unsigned char *src, char *dst, socklen_t size)
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
{
if (words[i] == 0)
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
{
if (words[i] == 0)
- {
- if (cur.base == -1)
- cur.base = i, cur.len = 1;
- else
- cur.len++;
- }
+
{
+
if (cur.base == -1)
+
cur.base = i, cur.len = 1;
+
else
+
cur.len++;
+
}
else
else
- {
- if (cur.base != -1)
- {
- if (best.base == -1 || cur.len > best.len)
- best = cur;
- cur.base = -1;
- }
- }
+
{
+
if (cur.base != -1)
+
{
+
if (best.base == -1 || cur.len > best.len)
+
best = cur;
+
cur.base = -1;
+
}
+
}
}
if (cur.base != -1)
{
if (best.base == -1 || cur.len > best.len)
}
if (cur.base != -1)
{
if (best.base == -1 || cur.len > best.len)
- best = cur;
+
best = cur;
}
if (best.base != -1 && best.len < 2)
best.base = -1;
}
if (best.base != -1 && best.len < 2)
best.base = -1;
@@
-194,28
+202,28
@@
inet_ntop6 (const unsigned char *src, char *dst, socklen_t size)
{
/* Are we inside the best run of 0x00's? */
if (best.base != -1 && i >= best.base && i < (best.base + best.len))
{
/* Are we inside the best run of 0x00's? */
if (best.base != -1 && i >= best.base && i < (best.base + best.len))
- {
- if (i == best.base)
- *tp++ = ':';
- continue;
- }
+
{
+
if (i == best.base)
+
*tp++ = ':';
+
continue;
+
}
/* Are we following an initial run of 0x00s or any real hex? */
if (i != 0)
/* Are we following an initial run of 0x00s or any real hex? */
if (i != 0)
- *tp++ = ':';
+
*tp++ = ':';
/* Is this address an encapsulated IPv4? */
if (i == 6 && best.base == 0 &&
/* Is this address an encapsulated IPv4? */
if (i == 6 && best.base == 0 &&
- (best.len == 6 || (best.len == 5 && words[5] == 0xffff)))
- {
- if (!inet_ntop4 (src + 12, tp, sizeof tmp - (tp - tmp)))
- return (NULL);
- tp += strlen (tp);
- break;
- }
+
(best.len == 6 || (best.len == 5 && words[5] == 0xffff)))
+
{
+
if (!inet_ntop4 (src + 12, tp, sizeof tmp - (tp - tmp)))
+
return (NULL);
+
tp += strlen (tp);
+
break;
+
}
{
{
- int len = sprintf (tp, "%x", words[i]);
- if (len < 0)
- return NULL;
- tp += len;
+
int len = sprintf (tp, "%x", words[i]);
+
if (len < 0)
+
return NULL;
+
tp += len;
}
}
/* Was it a trailing run of 0x00's? */
}
}
/* Was it a trailing run of 0x00's? */
@@
-236,4
+244,6
@@
inet_ntop6 (const unsigned char *src, char *dst, socklen_t size)
return strcpy (dst, tmp);
}
return strcpy (dst, tmp);
}
+# endif
+
#endif
#endif