~andreserl/ubuntu/lucid/bind9/bind9-apport-533601

« back to all changes in this revision

Viewing changes to lib/isc/inet_pton.c

  • Committer: Bazaar Package Importer
  • Author(s): LaMont Jones
  • Date: 2006-01-05 12:29:28 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20060105122928-oih7ttkkmpb90q8q
Tags: 1:9.3.2-1
* New upstream
* use lsb-base for start/stop messages in init.d.
* switch to debhelper 4

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
 
 * Copyright (C) 2004  Internet Systems Consortium, Inc. ("ISC")
 
2
 * Copyright (C) 2004, 2005  Internet Systems Consortium, Inc. ("ISC")
3
3
 * Copyright (C) 1996-2003  Internet Software Consortium.
4
4
 *
5
5
 * Permission to use, copy, modify, and distribute this software for any
17
17
 
18
18
#if defined(LIBC_SCCS) && !defined(lint)
19
19
static char rcsid[] =
20
 
        "$Id: inet_pton.c,v 1.10.2.4.2.1 2004/03/06 08:14:31 marka Exp $";
 
20
        "$Id: inet_pton.c,v 1.10.2.4.2.3 2005/03/31 23:56:14 marka Exp $";
21
21
#endif /* LIBC_SCCS and not lint */
22
22
 
23
23
#include <config.h>
132
132
                          xdigits_u[] = "0123456789ABCDEF";
133
133
        unsigned char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp;
134
134
        const char *xdigits, *curtok;
135
 
        int ch, saw_xdigit;
 
135
        int ch, seen_xdigits;
136
136
        unsigned int val;
137
137
 
138
138
        memset((tp = tmp), '\0', NS_IN6ADDRSZ);
143
143
                if (*++src != ':')
144
144
                        return (0);
145
145
        curtok = src;
146
 
        saw_xdigit = 0;
 
146
        seen_xdigits = 0;
147
147
        val = 0;
148
148
        while ((ch = *src++) != '\0') {
149
149
                const char *pch;
153
153
                if (pch != NULL) {
154
154
                        val <<= 4;
155
155
                        val |= (pch - xdigits);
156
 
                        if (val > 0xffff)
 
156
                        if (++seen_xdigits > 4)
157
157
                                return (0);
158
 
                        saw_xdigit = 1;
159
158
                        continue;
160
159
                }
161
160
                if (ch == ':') {
162
161
                        curtok = src;
163
 
                        if (!saw_xdigit) {
 
162
                        if (!seen_xdigits) {
164
163
                                if (colonp)
165
164
                                        return (0);
166
165
                                colonp = tp;
170
169
                                return (0);
171
170
                        *tp++ = (unsigned char) (val >> 8) & 0xff;
172
171
                        *tp++ = (unsigned char) val & 0xff;
173
 
                        saw_xdigit = 0;
 
172
                        seen_xdigits = 0;
174
173
                        val = 0;
175
174
                        continue;
176
175
                }
177
176
                if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) &&
178
177
                    inet_pton4(curtok, tp) > 0) {
179
178
                        tp += NS_INADDRSZ;
180
 
                        saw_xdigit = 0;
 
179
                        seen_xdigits = 0;
181
180
                        break;  /* '\0' was seen by inet_pton4(). */
182
181
                }
183
182
                return (0);
184
183
        }
185
 
        if (saw_xdigit) {
 
184
        if (seen_xdigits) {
186
185
                if (tp + NS_INT16SZ > endp)
187
186
                        return (0);
188
187
                *tp++ = (unsigned char) (val >> 8) & 0xff;