diff options
Diffstat (limited to 'src/lib/libc/net/inet_neta.c')
-rw-r--r-- | src/lib/libc/net/inet_neta.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/lib/libc/net/inet_neta.c b/src/lib/libc/net/inet_neta.c new file mode 100644 index 0000000000..dffd1631b1 --- /dev/null +++ b/src/lib/libc/net/inet_neta.c | |||
@@ -0,0 +1,82 @@ | |||
1 | /* $OpenBSD: inet_neta.c,v 1.1 1997/03/13 19:07:31 downsj Exp $ */ | ||
2 | |||
3 | /* | ||
4 | * Copyright (c) 1996 by Internet Software Consortium. | ||
5 | * | ||
6 | * Permission to use, copy, modify, and distribute this software for any | ||
7 | * purpose with or without fee is hereby granted, provided that the above | ||
8 | * copyright notice and this permission notice appear in all copies. | ||
9 | * | ||
10 | * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS | ||
11 | * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES | ||
12 | * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE | ||
13 | * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | ||
14 | * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR | ||
15 | * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS | ||
16 | * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS | ||
17 | * SOFTWARE. | ||
18 | */ | ||
19 | |||
20 | #if defined(LIBC_SCCS) && !defined(lint) | ||
21 | #if 0 | ||
22 | static const char rcsid[] = "$Id: inet_neta.c,v 1.1 1997/03/13 19:07:31 downsj Exp $"; | ||
23 | #else | ||
24 | static const char rcsid[] = "$OpenBSD: inet_neta.c,v 1.1 1997/03/13 19:07:31 downsj Exp $"; | ||
25 | #endif | ||
26 | #endif | ||
27 | |||
28 | #include <sys/types.h> | ||
29 | #include <sys/socket.h> | ||
30 | #include <netinet/in.h> | ||
31 | #include <arpa/inet.h> | ||
32 | |||
33 | #include <errno.h> | ||
34 | #include <stdio.h> | ||
35 | |||
36 | /* | ||
37 | * char * | ||
38 | * inet_neta(src, dst, size) | ||
39 | * format a u_long network number into presentation format. | ||
40 | * return: | ||
41 | * pointer to dst, or NULL if an error occurred (check errno). | ||
42 | * note: | ||
43 | * format of ``src'' is as for inet_network(). | ||
44 | * author: | ||
45 | * Paul Vixie (ISC), July 1996 | ||
46 | */ | ||
47 | char * | ||
48 | inet_neta(src, dst, size) | ||
49 | u_long src; | ||
50 | char *dst; | ||
51 | size_t size; | ||
52 | { | ||
53 | char *odst = dst; | ||
54 | char *tp; | ||
55 | |||
56 | while (src & 0xffffffff) { | ||
57 | u_char b = (src & 0xff000000) >> 24; | ||
58 | |||
59 | src <<= 8; | ||
60 | if (b) { | ||
61 | if (size < sizeof "255.") | ||
62 | goto emsgsize; | ||
63 | tp = dst; | ||
64 | dst += sprintf(dst, "%u", b); | ||
65 | if (src != 0L) { | ||
66 | *dst++ = '.'; | ||
67 | *dst = '\0'; | ||
68 | } | ||
69 | size -= (size_t)(dst - tp); | ||
70 | } | ||
71 | } | ||
72 | if (dst == odst) { | ||
73 | if (size < sizeof "0.0.0.0") | ||
74 | goto emsgsize; | ||
75 | strcpy(dst, "0.0.0.0"); | ||
76 | } | ||
77 | return (odst); | ||
78 | |||
79 | emsgsize: | ||
80 | errno = EMSGSIZE; | ||
81 | return (NULL); | ||
82 | } | ||