Mercurial > trustbridge > nss-cmake-static
comparison nspr/pr/src/misc/praton.c @ 0:1e5118fa0cb1
This is NSS with a Cmake Buildsyste
To compile a static NSS library for Windows we've used the
Chromium-NSS fork and added a Cmake buildsystem to compile
it statically for Windows. See README.chromium for chromium
changes and README.trustbridge for our modifications.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 28 Jul 2014 10:47:06 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1e5118fa0cb1 |
---|---|
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ | |
2 /******************************************************************************* | |
3 * The following function pr_inet_aton is based on the BSD function inet_aton | |
4 * with some modifications. The license and copyright notices applying to this | |
5 * function appear below. Modifications are also according to the license below. | |
6 ******************************************************************************/ | |
7 | |
8 #include "prnetdb.h" | |
9 | |
10 /* | |
11 * Copyright (c) 1983, 1990, 1993 | |
12 * The Regents of the University of California. All rights reserved. | |
13 * | |
14 * Redistribution and use in source and binary forms, with or without | |
15 * modification, are permitted provided that the following conditions | |
16 * are met: | |
17 * 1. Redistributions of source code must retain the above copyright | |
18 * notice, this list of conditions and the following disclaimer. | |
19 * 2. Redistributions in binary form must reproduce the above copyright | |
20 * notice, this list of conditions and the following disclaimer in the | |
21 * documentation and/or other materials provided with the distribution. | |
22 * 4. Neither the name of the University nor the names of its contributors | |
23 * may be used to endorse or promote products derived from this software | |
24 * without specific prior written permission. | |
25 * | |
26 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |
27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
29 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |
30 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
36 * SUCH DAMAGE. | |
37 */ | |
38 | |
39 /* | |
40 * Portions Copyright (c) 1993 by Digital Equipment Corporation. | |
41 * | |
42 * Permission to use, copy, modify, and distribute this software for any | |
43 * purpose with or without fee is hereby granted, provided that the above | |
44 * copyright notice and this permission notice appear in all copies, and that | |
45 * the name of Digital Equipment Corporation not be used in advertising or | |
46 * publicity pertaining to distribution of the document or software without | |
47 * specific, written prior permission. | |
48 * | |
49 * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL | |
50 * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES | |
51 * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT | |
52 * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |
53 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR | |
54 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS | |
55 * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS | |
56 * SOFTWARE. | |
57 */ | |
58 | |
59 /* | |
60 * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") | |
61 * Portions Copyright (c) 1996-1999 by Internet Software Consortium. | |
62 * | |
63 * Permission to use, copy, modify, and distribute this software for any | |
64 * purpose with or without fee is hereby granted, provided that the above | |
65 * copyright notice and this permission notice appear in all copies. | |
66 * | |
67 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES | |
68 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
69 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR | |
70 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
71 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
72 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT | |
73 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
74 */ | |
75 | |
76 #define XX 127 | |
77 static const unsigned char index_hex[256] = { | |
78 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, | |
79 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, | |
80 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, | |
81 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,XX,XX, XX,XX,XX,XX, | |
82 XX,10,11,12, 13,14,15,XX, XX,XX,XX,XX, XX,XX,XX,XX, | |
83 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, | |
84 XX,10,11,12, 13,14,15,XX, XX,XX,XX,XX, XX,XX,XX,XX, | |
85 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, | |
86 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, | |
87 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, | |
88 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, | |
89 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, | |
90 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, | |
91 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, | |
92 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, | |
93 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, | |
94 }; | |
95 | |
96 static PRBool _isdigit(char c) { return c >= '0' && c <= '9'; } | |
97 static PRBool _isxdigit(char c) { return index_hex[(unsigned char) c] != XX; } | |
98 static PRBool _isspace(char c) { return c == ' ' || (c >= '\t' && c <= '\r'); } | |
99 #undef XX | |
100 | |
101 int | |
102 pr_inet_aton(const char *cp, PRUint32 *addr) | |
103 { | |
104 PRUint32 val; | |
105 int base, n; | |
106 char c; | |
107 PRUint8 parts[4]; | |
108 PRUint8 *pp = parts; | |
109 int digit; | |
110 | |
111 c = *cp; | |
112 for (;;) { | |
113 /* | |
114 * Collect number up to ``.''. | |
115 * Values are specified as for C: | |
116 * 0x=hex, 0=octal, isdigit=decimal. | |
117 */ | |
118 if (!_isdigit(c)) | |
119 return (0); | |
120 val = 0; base = 10; digit = 0; | |
121 if (c == '0') { | |
122 c = *++cp; | |
123 if (c == 'x' || c == 'X') | |
124 base = 16, c = *++cp; | |
125 else { | |
126 base = 8; | |
127 digit = 1; | |
128 } | |
129 } | |
130 for (;;) { | |
131 if (_isdigit(c)) { | |
132 if (base == 8 && (c == '8' || c == '9')) | |
133 return (0); | |
134 val = (val * base) + (c - '0'); | |
135 c = *++cp; | |
136 digit = 1; | |
137 } else if (base == 16 && _isxdigit(c)) { | |
138 val = (val << 4) + index_hex[(unsigned char) c]; | |
139 c = *++cp; | |
140 digit = 1; | |
141 } else | |
142 break; | |
143 } | |
144 if (c == '.') { | |
145 /* | |
146 * Internet format: | |
147 * a.b.c.d | |
148 * a.b.c (with c treated as 16 bits) | |
149 * a.b (with b treated as 24 bits) | |
150 */ | |
151 if (pp >= parts + 3 || val > 0xffU) | |
152 return (0); | |
153 *pp++ = val; | |
154 c = *++cp; | |
155 } else | |
156 break; | |
157 } | |
158 /* | |
159 * Check for trailing characters. | |
160 */ | |
161 if (c != '\0' && !_isspace(c)) | |
162 return (0); | |
163 /* | |
164 * Did we get a valid digit? | |
165 */ | |
166 if (!digit) | |
167 return (0); | |
168 /* | |
169 * Concoct the address according to | |
170 * the number of parts specified. | |
171 */ | |
172 n = pp - parts + 1; | |
173 switch (n) { | |
174 case 1: /*%< a -- 32 bits */ | |
175 break; | |
176 | |
177 case 2: /*%< a.b -- 8.24 bits */ | |
178 if (val > 0xffffffU) | |
179 return (0); | |
180 val |= parts[0] << 24; | |
181 break; | |
182 | |
183 case 3: /*%< a.b.c -- 8.8.16 bits */ | |
184 if (val > 0xffffU) | |
185 return (0); | |
186 val |= (parts[0] << 24) | (parts[1] << 16); | |
187 break; | |
188 | |
189 case 4: /*%< a.b.c.d -- 8.8.8.8 bits */ | |
190 if (val > 0xffU) | |
191 return (0); | |
192 val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8); | |
193 break; | |
194 } | |
195 *addr = PR_htonl(val); | |
196 return (1); | |
197 } | |
198 |