1*6e778a7eSPedro F. Giffuni /*-
2*6e778a7eSPedro F. Giffuni * SPDX-License-Identifier: ISC
3*6e778a7eSPedro F. Giffuni *
465e96449SHajimu UMEMOTO * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
565e96449SHajimu UMEMOTO * Copyright (c) 1996,1999 by Internet Software Consortium.
665e96449SHajimu UMEMOTO *
765e96449SHajimu UMEMOTO * Permission to use, copy, modify, and distribute this software for any
865e96449SHajimu UMEMOTO * purpose with or without fee is hereby granted, provided that the above
965e96449SHajimu UMEMOTO * copyright notice and this permission notice appear in all copies.
1065e96449SHajimu UMEMOTO *
1165e96449SHajimu UMEMOTO * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
1265e96449SHajimu UMEMOTO * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1365e96449SHajimu UMEMOTO * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
1465e96449SHajimu UMEMOTO * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1565e96449SHajimu UMEMOTO * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1665e96449SHajimu UMEMOTO * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
1765e96449SHajimu UMEMOTO * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1865e96449SHajimu UMEMOTO */
1965e96449SHajimu UMEMOTO
2065e96449SHajimu UMEMOTO #include "port_before.h"
2165e96449SHajimu UMEMOTO
2265e96449SHajimu UMEMOTO #include <sys/types.h>
2365e96449SHajimu UMEMOTO #include <sys/socket.h>
2465e96449SHajimu UMEMOTO #include <netinet/in.h>
2565e96449SHajimu UMEMOTO #include <arpa/inet.h>
2665e96449SHajimu UMEMOTO
2765e96449SHajimu UMEMOTO #include <errno.h>
2865e96449SHajimu UMEMOTO #include <stdio.h>
2965e96449SHajimu UMEMOTO #include <string.h>
3065e96449SHajimu UMEMOTO
3165e96449SHajimu UMEMOTO #include "port_after.h"
3265e96449SHajimu UMEMOTO
3365e96449SHajimu UMEMOTO #ifdef SPRINTF_CHAR
3465e96449SHajimu UMEMOTO # define SPRINTF(x) strlen(sprintf/**/x)
3565e96449SHajimu UMEMOTO #else
3665e96449SHajimu UMEMOTO # define SPRINTF(x) ((size_t)sprintf x)
3765e96449SHajimu UMEMOTO #endif
3865e96449SHajimu UMEMOTO
39dde4a85dSHajimu UMEMOTO /*%
4065e96449SHajimu UMEMOTO * char *
4165e96449SHajimu UMEMOTO * inet_neta(src, dst, size)
42ab96eeabSHajimu UMEMOTO * format an in_addr_t network number into presentation format.
4365e96449SHajimu UMEMOTO * return:
4465e96449SHajimu UMEMOTO * pointer to dst, or NULL if an error occurred (check errno).
4565e96449SHajimu UMEMOTO * note:
4665e96449SHajimu UMEMOTO * format of ``src'' is as for inet_network().
4765e96449SHajimu UMEMOTO * author:
4865e96449SHajimu UMEMOTO * Paul Vixie (ISC), July 1996
4965e96449SHajimu UMEMOTO */
5065e96449SHajimu UMEMOTO char *
inet_neta(in_addr_t src,char * dst,size_t size)51060e5496SCraig Rodrigues inet_neta(in_addr_t src, char *dst, size_t size)
5265e96449SHajimu UMEMOTO {
5365e96449SHajimu UMEMOTO char *odst = dst;
5465e96449SHajimu UMEMOTO char *tp;
5565e96449SHajimu UMEMOTO
5665e96449SHajimu UMEMOTO while (src & 0xffffffff) {
5765e96449SHajimu UMEMOTO u_char b = (src & 0xff000000) >> 24;
5865e96449SHajimu UMEMOTO
5965e96449SHajimu UMEMOTO src <<= 8;
6065e96449SHajimu UMEMOTO if (b) {
6165e96449SHajimu UMEMOTO if (size < sizeof "255.")
6265e96449SHajimu UMEMOTO goto emsgsize;
6365e96449SHajimu UMEMOTO tp = dst;
6465e96449SHajimu UMEMOTO dst += SPRINTF((dst, "%u", b));
6565e96449SHajimu UMEMOTO if (src != 0L) {
6665e96449SHajimu UMEMOTO *dst++ = '.';
6765e96449SHajimu UMEMOTO *dst = '\0';
6865e96449SHajimu UMEMOTO }
6965e96449SHajimu UMEMOTO size -= (size_t)(dst - tp);
7065e96449SHajimu UMEMOTO }
7165e96449SHajimu UMEMOTO }
7265e96449SHajimu UMEMOTO if (dst == odst) {
7365e96449SHajimu UMEMOTO if (size < sizeof "0.0.0.0")
7465e96449SHajimu UMEMOTO goto emsgsize;
7565e96449SHajimu UMEMOTO strcpy(dst, "0.0.0.0");
7665e96449SHajimu UMEMOTO }
7765e96449SHajimu UMEMOTO return (odst);
7865e96449SHajimu UMEMOTO
7965e96449SHajimu UMEMOTO emsgsize:
8065e96449SHajimu UMEMOTO errno = EMSGSIZE;
8165e96449SHajimu UMEMOTO return (NULL);
8265e96449SHajimu UMEMOTO }
83ab96eeabSHajimu UMEMOTO
84ab96eeabSHajimu UMEMOTO /*
85ab96eeabSHajimu UMEMOTO * Weak aliases for applications that use certain private entry points,
86ab96eeabSHajimu UMEMOTO * and fail to include <arpa/inet.h>.
87ab96eeabSHajimu UMEMOTO */
88ab96eeabSHajimu UMEMOTO #undef inet_neta
89ab96eeabSHajimu UMEMOTO __weak_reference(__inet_neta, inet_neta);
90dde4a85dSHajimu UMEMOTO
91dde4a85dSHajimu UMEMOTO /*! \file */
92