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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [uClibc/] [libc/] [inet/] [inet_net.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1325 phoenix
/*
2
 * Copyright (c) 1983, 1993
3
 *      The Regents of the University of California.  All rights reserved.
4
 * All rights reserved.
5
 *
6
 * Redistribution and use in source and binary forms, with or without
7
 * modification, are permitted provided that the following conditions
8
 * are met:
9
 * 1. Redistributions of source code must retain the above copyright
10
 *    notice, this list of conditions and the following disclaimer.
11
 * 2. Redistributions in binary form must reproduce the above copyright
12
 *    notice, this list of conditions and the following disclaimer in the
13
 *    documentation and/or other materials provided with the distribution.
14
 * 3. All advertising materials mentioning features or use of this software
15
 *    must display the following acknowledgement:
16
 *      This product includes software developed by the University of
17
 *      California, Berkeley and its contributors.
18
 * 4. Neither the name of the University nor the names of its contributors
19
 *    may be used to endorse or promote products derived from this software
20
 *    without specific prior written permission.
21
 *
22
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32
 * SUCH DAMAGE.
33
 */
34
 
35
#define __FORCE_GLIBC
36
#include <features.h>
37
#include <ctype.h>
38
#include <netinet/in.h>
39
 
40
/*
41
 * Internet network address interpretation routine.
42
 * The library routines call this routine to interpret
43
 * network numbers.
44
 */
45
in_addr_t
46
inet_network(const char *cp)
47
{
48
        register in_addr_t val, base, n;
49
        register char c;
50
        in_addr_t parts[4], *pp = parts;
51
        register int i;
52
 
53
again:
54
        /*
55
         * Collect number up to ``.''.
56
         * Values are specified as for C:
57
         * 0x=hex, 0=octal, other=decimal.
58
         */
59
        val = 0; base = 10;
60
        /*
61
         * The 4.4BSD version of this file also accepts 'x__' as a hexa
62
         * number.  I don't think this is correct.  -- Uli
63
         */
64
        if (*cp == '0') {
65
                if (*++cp == 'x' || *cp == 'X')
66
                        base = 16, cp++;
67
                else
68
                        base = 8;
69
        }
70
        while ((c = *cp)) {
71
                if (isdigit(c)) {
72
                        val = (val * base) + (c - '0');
73
                        cp++;
74
                        continue;
75
                }
76
                if (base == 16 && isxdigit(c)) {
77
                        val = (val << 4) + (c + 10 - (islower(c) ? 'a' : 'A'));
78
                        cp++;
79
                        continue;
80
                }
81
                break;
82
        }
83
        if (*cp == '.') {
84
                if (pp >= parts + 4)
85
                        return (INADDR_NONE);
86
                *pp++ = val, cp++;
87
                goto again;
88
        }
89
        if (*cp && !isspace(*cp))
90
                return (INADDR_NONE);
91
        *pp++ = val;
92
        n = pp - parts;
93
        if (n > 4)
94
                return (INADDR_NONE);
95
        for (val = 0, i = 0; i < n; i++) {
96
                val <<= 8;
97
                val |= parts[i] & 0xff;
98
        }
99
        return (val);
100
}

powered by: WebSVN 2.1.0

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