summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/libc/net/getnameinfo.c37
1 files changed, 25 insertions, 12 deletions
diff --git a/lib/libc/net/getnameinfo.c b/lib/libc/net/getnameinfo.c
index 0906686fa63..0dee5a6c4cc 100644
--- a/lib/libc/net/getnameinfo.c
+++ b/lib/libc/net/getnameinfo.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: getnameinfo.c,v 1.18 2000/09/25 22:52:57 itojun Exp $ */
+/* $OpenBSD: getnameinfo.c,v 1.19 2001/08/20 02:23:33 itojun Exp $ */
/* $KAME: getnameinfo.c,v 1.45 2000/09/25 22:43:56 itojun Exp $ */
/*
@@ -315,17 +315,18 @@ ip6_parsenumeric(sa, addr, host, hostlen, flags)
char scopebuf[MAXHOSTNAMELEN];
int scopelen;
- /* ip6_sa2str never fails */
- scopelen = ip6_sa2str((const struct sockaddr_in6 *)sa,
- scopebuf, sizeof(scopebuf),
- flags);
+ scopelen = ip6_sa2str(
+ (const struct sockaddr_in6 *)(const void *)sa,
+ scopebuf, sizeof(scopebuf), 0);
+ if (scopelen < 0)
+ return ENI_MEMORY;
if (scopelen + 1 + numaddrlen + 1 > hostlen)
return ENI_MEMORY;
/*
* construct <numeric-addr><delim><scopeid>
*/
memcpy(host + numaddrlen + 1, scopebuf,
- scopelen);
+ (size_t)scopelen);
host[numaddrlen] = SCOPE_DELIMITER;
host[numaddrlen + 1 + scopelen] = '\0';
}
@@ -343,12 +344,20 @@ ip6_sa2str(sa6, buf, bufsiz, flags)
size_t bufsiz;
int flags;
{
- unsigned int ifindex = (unsigned int)sa6->sin6_scope_id;
- const struct in6_addr *a6 = &sa6->sin6_addr;
+ unsigned int ifindex;
+ const struct in6_addr *a6;
+ int n;
+
+ ifindex = (unsigned int)sa6->sin6_scope_id;
+ a6 = &sa6->sin6_addr;
-#ifdef notyet
- if (flags & NI_NUMERICSCOPE) {
- return(snprintf(buf, bufsiz, "%d", sa6->sin6_scope_id));
+#ifdef notdef
+ if ((flags & NI_NUMERICSCOPE) != 0) {
+ n = snprintf(buf, bufsiz, "%u", sa6->sin6_scope_id);
+ if (n < 0 || n >= bufsiz)
+ return -1;
+ else
+ return n;
}
#endif
@@ -362,6 +371,10 @@ ip6_sa2str(sa6, buf, bufsiz, flags)
}
/* last resort */
- return(snprintf(buf, bufsiz, "%u", sa6->sin6_scope_id));
+ n = snprintf(buf, bufsiz, "%u", sa6->sin6_scope_id);
+ if (n < 0 || n >= bufsiz)
+ return -1;
+ else
+ return n;
}
#endif /* INET6 */