1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18: #if defined(LIBC_SCCS) && !defined(lint)
19: static const char rcsid[] = "$BINDId: inet_neta.c,v 1.6 1999/01/08 19:23:45 vixie Exp $";
20: #endif
21:
22: #include <sys/types.h>
23: #include <sys/socket.h>
24: #include <netinet/in.h>
25: #include <arpa/inet.h>
26:
27: #include <errno.h>
28: #include <stdio.h>
29: #include <string.h>
30:
31: #ifdef SPRINTF_CHAR
32: # define SPRINTF(x) strlen(sprintfx)
33: #else
34: # define SPRINTF(x) ((size_t)sprintf x)
35: #endif
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48: char *
49: inet_neta(src, dst, size)
50: u_int32_t src;
51: char *dst;
52: size_t size;
53: {
54: char *odst = dst;
55: char *tp;
56:
57: while (src & 0xffffffff) {
58: u_char b = (src & 0xff000000) >> 24;
59:
60: src <<= 8;
61: if (b) {
62: if (size < sizeof "255.")
63: goto emsgsize;
64: tp = dst;
65: dst += SPRINTF((dst, "%u", b));
66: if (src != 0L) {
67: *dst++ = '.';
68: *dst = '\0';
69: }
70: size -= (size_t)(dst - tp);
71: }
72: }
73: if (dst == odst) {
74: if (size < sizeof "0.0.0.0")
75: goto emsgsize;
76: strcpy(dst, "0.0.0.0");
77: }
78: return (odst);
79:
80: emsgsize:
81: __set_errno (EMSGSIZE);
82: return (NULL);
83: }