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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [rtems/] [c/] [src/] [libnetworking/] [libc/] [getnetbyht.c] - Blame information for rev 507

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

Line No. Rev Author Line
1 30 unneback
/*
2
 * Copyright (c) 1983, 1993
3
 *      The Regents of the University of California.  All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions
7
 * are met:
8
 * 1. Redistributions of source code must retain the above copyright
9
 *    notice, this list of conditions and the following disclaimer.
10
 * 2. Redistributions in binary form must reproduce the above copyright
11
 *    notice, this list of conditions and the following disclaimer in the
12
 *    documentation and/or other materials provided with the distribution.
13
 * 3. All advertising materials mentioning features or use of this software
14
 *    must display the following acknowledgement:
15
 *      This product includes software developed by the University of
16
 *      California, Berkeley and its contributors.
17
 * 4. Neither the name of the University nor the names of its contributors
18
 *    may be used to endorse or promote products derived from this software
19
 *    without specific prior written permission.
20
 *
21
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31
 * SUCH DAMAGE.
32
 */
33
 
34
/* Portions Copyright (c) 1993 Carlos Leandro and Rui Salgueiro
35
 *      Dep. Matematica Universidade de Coimbra, Portugal, Europe
36
 *
37
 * Permission to use, copy, modify, and distribute this software for any
38
 * purpose with or without fee is hereby granted, provided that the above
39
 * copyright notice and this permission notice appear in all copies.
40
 *
41
 * from getnetent.c     1.1 (Coimbra) 93/06/02
42
 */
43
 
44
#if defined(LIBC_SCCS) && !defined(lint)
45
static char sccsid[] = "@(#)getnetent.c 8.1 (Berkeley) 6/4/93";
46
static char orig_rcsid[] = "From: Id: getnetent.c,v 8.4 1997/06/01 20:34:37 vixie Exp";
47
static chat rcsid[] = "$Id: getnetbyht.c,v 1.2 2001-09-27 12:01:53 chris Exp $";
48
#endif /* LIBC_SCCS and not lint */
49
 
50
#include <sys/types.h>
51
#include <sys/socket.h>
52
#include <netinet/in.h>
53
#include <arpa/inet.h>
54
#include <arpa/nameser.h>
55
#include <netdb.h>
56
#include <stdio.h>
57
#include <string.h>
58
 
59
#define MAXALIASES      35
60
 
61
static FILE *netf;
62
static char line[BUFSIZ+1];
63
static struct netent net;
64
static char *net_aliases[MAXALIASES];
65
static int _net_stayopen;
66
 
67
void
68
_setnethtent(f)
69
        int f;
70
{
71
 
72
        if (netf == NULL)
73
                netf = fopen(_PATH_NETWORKS, "r" );
74
        else
75
                rewind(netf);
76
        _net_stayopen |= f;
77
}
78
 
79
void
80
_endnethtent()
81
{
82
 
83
        if (netf) {
84
                fclose(netf);
85
                netf = NULL;
86
        }
87
        _net_stayopen = 0;
88
}
89
 
90
struct netent *
91
getnetent()
92
{
93
        char *p;
94
        register char *cp, **q;
95
 
96
        if (netf == NULL && (netf = fopen(_PATH_NETWORKS, "r" )) == NULL)
97
                return (NULL);
98
again:
99
        p = fgets(line, sizeof line, netf);
100
        if (p == NULL)
101
                return (NULL);
102
        if (*p == '#')
103
                goto again;
104
        cp = strpbrk(p, "#\n");
105
        if (cp == NULL)
106
                goto again;
107
        *cp = '\0';
108
        net.n_name = p;
109
        cp = strpbrk(p, " \t");
110
        if (cp == NULL)
111
                goto again;
112
        *cp++ = '\0';
113
        while (*cp == ' ' || *cp == '\t')
114
                cp++;
115
        p = strpbrk(cp, " \t");
116
        if (p != NULL)
117
                *p++ = '\0';
118
        net.n_net = inet_network(cp);
119
        net.n_addrtype = AF_INET;
120
        q = net.n_aliases = net_aliases;
121
        if (p != NULL)
122
                cp = p;
123
        while (cp && *cp) {
124
                if (*cp == ' ' || *cp == '\t') {
125
                        cp++;
126
                        continue;
127
                }
128
                if (q < &net_aliases[MAXALIASES - 1])
129
                        *q++ = cp;
130
                cp = strpbrk(cp, " \t");
131
                if (cp != NULL)
132
                        *cp++ = '\0';
133
        }
134
        *q = NULL;
135
        return (&net);
136
}
137
 
138
struct netent *
139
_getnetbyhtname(name)
140
        register const char *name;
141
{
142
        register struct netent *p;
143
        register char **cp;
144
 
145
        setnetent(_net_stayopen);
146
        while ( (p = getnetent()) ) {
147
                if (strcasecmp(p->n_name, name) == 0)
148
                        break;
149
                for (cp = p->n_aliases; *cp != 0; cp++)
150
                        if (strcasecmp(*cp, name) == 0)
151
                                goto found;
152
        }
153
found:
154
        if (!_net_stayopen)
155
                endnetent();
156
        return (p);
157
}
158
 
159
struct netent *
160
_getnetbyhtaddr(net, type)
161
        register unsigned long net;
162
        register int type;
163
{
164
        register struct netent *p;
165
 
166
        setnetent(_net_stayopen);
167
        while ( (p = getnetent()) )
168
                if (p->n_addrtype == type && p->n_net == net)
169
                        break;
170
        if (!_net_stayopen)
171
                endnetent();
172
        return (p);
173
}

powered by: WebSVN 2.1.0

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