OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [newlib-1.18.0/] [newlib/] [libc/] [sys/] [linux/] [net/] [inet_net_ntop.c] - Blame information for rev 207

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 207 jeremybenn
/*
2
 * Copyright (c) 1996 by Internet Software Consortium.
3
 *
4
 * Permission to use, copy, modify, and distribute this software for any
5
 * purpose with or without fee is hereby granted, provided that the above
6
 * copyright notice and this permission notice appear in all copies.
7
 *
8
 * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
9
 * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
10
 * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
11
 * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
12
 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
13
 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
14
 * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
15
 * SOFTWARE.
16
 */
17
 
18
#if defined(LIBC_SCCS) && !defined(lint)
19
static const char orig_rcsid[] = "From Id: inet_net_ntop.c,v 8.2 1996/08/08 06:54:44 vixie Exp";
20
#endif
21
#include <sys/cdefs.h>
22
#include <sys/types.h>
23
 
24
#include <sys/types.h>
25
#include <sys/socket.h>
26
#include <netinet/in.h>
27
#include <arpa/inet.h>
28
 
29
#include <errno.h>
30
#include <stdio.h>
31
#include <string.h>
32
#include <stdlib.h>
33
 
34
#ifdef SPRINTF_CHAR
35
# define SPRINTF(x) strlen(sprintf/**/x)
36
#else
37
# define SPRINTF(x) ((size_t)sprintf x)
38
#endif
39
 
40
static char *   inet_net_ntop_ipv4(const u_char *src, int bits, char *dst,
41
                    size_t size);
42
 
43
/*
44
 * char *
45
 * inet_net_ntop(af, src, bits, dst, size)
46
 *      convert network number from network to presentation format.
47
 *      generates CIDR style result always.
48
 * return:
49
 *      pointer to dst, or NULL if an error occurred (check errno).
50
 * author:
51
 *      Paul Vixie (ISC), July 1996
52
 */
53
char *
54
inet_net_ntop(af, src, bits, dst, size)
55
        int af;
56
        const void *src;
57
        int bits;
58
        char *dst;
59
        size_t size;
60
{
61
        switch (af) {
62
        case AF_INET:
63
                return (inet_net_ntop_ipv4(src, bits, dst, size));
64
        default:
65
                errno = EAFNOSUPPORT;
66
                return (NULL);
67
        }
68
}
69
 
70
/*
71
 * static char *
72
 * inet_net_ntop_ipv4(src, bits, dst, size)
73
 *      convert IPv4 network number from network to presentation format.
74
 *      generates CIDR style result always.
75
 * return:
76
 *      pointer to dst, or NULL if an error occurred (check errno).
77
 * note:
78
 *      network byte order assumed.  this means 192.5.5.240/28 has
79
 *      0x11110000 in its fourth octet.
80
 * author:
81
 *      Paul Vixie (ISC), July 1996
82
 */
83
static char *
84
inet_net_ntop_ipv4(src, bits, dst, size)
85
        const u_char *src;
86
        int bits;
87
        char *dst;
88
        size_t size;
89
{
90
        char *odst = dst;
91
        char *t;
92
        u_int m;
93
        int b;
94
 
95
        if (bits < 0 || bits > 32) {
96
                errno = EINVAL;
97
                return (NULL);
98
        }
99
        if (bits == 0) {
100
                if (size < sizeof "0")
101
                        goto emsgsize;
102
                *dst++ = '0';
103
                *dst = '\0';
104
        }
105
 
106
        /* Format whole octets. */
107
        for (b = bits / 8; b > 0; b--) {
108
                if (size < sizeof "255.")
109
                        goto emsgsize;
110
                t = dst;
111
                dst += SPRINTF((dst, "%u", *src++));
112
                if (b > 1) {
113
                        *dst++ = '.';
114
                        *dst = '\0';
115
                }
116
                size -= (size_t)(dst - t);
117
        }
118
 
119
        /* Format partial octet. */
120
        b = bits % 8;
121
        if (b > 0) {
122
                if (size < sizeof ".255")
123
                        goto emsgsize;
124
                t = dst;
125
                if (dst != odst)
126
                        *dst++ = '.';
127
                m = ((1 << b) - 1) << (8 - b);
128
                dst += SPRINTF((dst, "%u", *src & m));
129
                size -= (size_t)(dst - t);
130
        }
131
 
132
        /* Format CIDR /width. */
133
        if (size < sizeof "/32")
134
                goto emsgsize;
135
        dst += SPRINTF((dst, "/%u", bits));
136
        return (odst);
137
 
138
 emsgsize:
139
        errno = EMSGSIZE;
140
        return (NULL);
141
}
142
 
143
/*
144
 * Weak aliases for applications that use certain private entry points,
145
 * and fail to include <arpa/inet.h>.
146
 */
147
#undef inet_net_ntop
148
__weak_reference(__inet_net_ntop, inet_net_ntop);

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.