summaryrefslogtreecommitdiff
path: root/src/lib/libc/net/getproto.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libc/net/getproto.c')
-rw-r--r--src/lib/libc/net/getproto.c47
1 files changed, 24 insertions, 23 deletions
diff --git a/src/lib/libc/net/getproto.c b/src/lib/libc/net/getproto.c
index 49c09b0806..16d840394c 100644
--- a/src/lib/libc/net/getproto.c
+++ b/src/lib/libc/net/getproto.c
@@ -1,5 +1,3 @@
1/* $NetBSD: getproto.c,v 1.4 1995/02/25 06:20:33 cgd Exp $ */
2
3/* 1/*
4 * Copyright (c) 1983, 1993 2 * Copyright (c) 1983, 1993
5 * The Regents of the University of California. All rights reserved. 3 * The Regents of the University of California. All rights reserved.
@@ -12,11 +10,7 @@
12 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the 11 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution. 12 * documentation and/or other materials provided with the distribution.
15 * 3. All advertising materials mentioning features or use of this software 13 * 3. Neither the name of the University nor the names of its contributors
16 * must display the following acknowledgement:
17 * This product includes software developed by the University of
18 * California, Berkeley and its contributors.
19 * 4. Neither the name of the University nor the names of its contributors
20 * may be used to endorse or promote products derived from this software 14 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission. 15 * without specific prior written permission.
22 * 16 *
@@ -34,28 +28,35 @@
34 */ 28 */
35 29
36#if defined(LIBC_SCCS) && !defined(lint) 30#if defined(LIBC_SCCS) && !defined(lint)
37#if 0 31static char rcsid[] = "$OpenBSD: getproto.c,v 1.6 2004/10/25 03:09:01 millert Exp $";
38static char sccsid[] = "@(#)getproto.c 8.1 (Berkeley) 6/4/93";
39#else
40static char rcsid[] = "$NetBSD: getproto.c,v 1.4 1995/02/25 06:20:33 cgd Exp $";
41#endif
42#endif /* LIBC_SCCS and not lint */ 32#endif /* LIBC_SCCS and not lint */
43 33
44#include <netdb.h> 34#include <netdb.h>
35#include <stdio.h>
36
37int
38getprotobynumber_r(int num, struct protoent *pe, struct protoent_data *pd)
39{
40 int error;
45 41
46extern int _proto_stayopen; 42 setprotoent_r(pd->stayopen, pd);
43 while ((error = getprotoent_r(pe, pd)) == 0)
44 if (pe->p_proto == num)
45 break;
46 if (!pd->stayopen && pd->fp != NULL) {
47 (void)fclose(pd->fp);
48 pd->fp = NULL;
49 }
50 return (error);
51}
47 52
48struct protoent * 53struct protoent *
49getprotobynumber(proto) 54getprotobynumber(int num)
50 register int proto;
51{ 55{
52 register struct protoent *p; 56 extern struct protoent_data _protoent_data;
57 static struct protoent proto;
53 58
54 setprotoent(_proto_stayopen); 59 if (getprotobynumber_r(num, &proto, &_protoent_data) != 0)
55 while (p = getprotoent()) 60 return (NULL);
56 if (p->p_proto == proto) 61 return (&proto);
57 break;
58 if (!_proto_stayopen)
59 endprotoent();
60 return (p);
61} 62}