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

Subversion Repositories openrisc

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

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
 *  $Id: getprotoent.c,v 1.2 2001-09-27 12:01:53 chris Exp $
34
 */
35
 
36
#if defined(LIBC_SCCS) && !defined(lint)
37
static char sccsid[] = "@(#)getprotoent.c       8.1 (Berkeley) 6/4/93";
38
#endif /* LIBC_SCCS and not lint */
39
 
40
#include <sys/types.h>
41
#include <sys/socket.h>
42
#include <netdb.h>
43
#include <stdio.h>
44
#include <stdlib.h>
45
#include <string.h>
46
 
47
#define MAXALIASES      35
48
 
49
static FILE *protof = NULL;
50
static char line[BUFSIZ+1];
51
static struct protoent proto;
52
static char *proto_aliases[MAXALIASES];
53
int _proto_stayopen;
54
 
55
void
56
setprotoent(f)
57
        int f;
58
{
59
        if (protof == NULL)
60
                protof = fopen(_PATH_PROTOCOLS, "r" );
61
        else
62
                rewind(protof);
63
        _proto_stayopen |= f;
64
}
65
 
66
void
67
endprotoent()
68
{
69
        if (protof) {
70
                fclose(protof);
71
                protof = NULL;
72
        }
73
        _proto_stayopen = 0;
74
}
75
 
76
struct protoent *
77
getprotoent()
78
{
79
        char *p;
80
        register char *cp, **q;
81
 
82
        if (protof == NULL && (protof = fopen(_PATH_PROTOCOLS, "r" )) == NULL)
83
                return (NULL);
84
again:
85
        if ((p = fgets(line, BUFSIZ, protof)) == NULL)
86
                return (NULL);
87
        if (*p == '#')
88
                goto again;
89
        cp = strpbrk(p, "#\n");
90
        if (cp == NULL)
91
                goto again;
92
        *cp = '\0';
93
        proto.p_name = p;
94
        cp = strpbrk(p, " \t");
95
        if (cp == NULL)
96
                goto again;
97
        *cp++ = '\0';
98
        while (*cp == ' ' || *cp == '\t')
99
                cp++;
100
        p = strpbrk(cp, " \t");
101
        if (p != NULL)
102
                *p++ = '\0';
103
        proto.p_proto = atoi(cp);
104
        q = proto.p_aliases = proto_aliases;
105
        if (p != NULL) {
106
                cp = p;
107
                while (cp && *cp) {
108
                        if (*cp == ' ' || *cp == '\t') {
109
                                cp++;
110
                                continue;
111
                        }
112
                        if (q < &proto_aliases[MAXALIASES - 1])
113
                                *q++ = cp;
114
                        cp = strpbrk(cp, " \t");
115
                        if (cp != NULL)
116
                                *cp++ = '\0';
117
                }
118
        }
119
        *q = NULL;
120
        return (&proto);
121
}

powered by: WebSVN 2.1.0

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