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.c50
1 files changed, 24 insertions, 26 deletions
diff --git a/src/lib/libc/net/getproto.c b/src/lib/libc/net/getproto.c
index 49c09b0806..07fa33288d 100644
--- a/src/lib/libc/net/getproto.c
+++ b/src/lib/libc/net/getproto.c
@@ -1,5 +1,4 @@
1/* $NetBSD: getproto.c,v 1.4 1995/02/25 06:20:33 cgd Exp $ */ 1/* $OpenBSD: getproto.c,v 1.7 2005/08/06 20:30:03 espie Exp $ */
2
3/* 2/*
4 * Copyright (c) 1983, 1993 3 * Copyright (c) 1983, 1993
5 * The Regents of the University of California. All rights reserved. 4 * The Regents of the University of California. All rights reserved.
@@ -12,11 +11,7 @@
12 * 2. Redistributions in binary form must reproduce the above copyright 11 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the 12 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution. 13 * documentation and/or other materials provided with the distribution.
15 * 3. All advertising materials mentioning features or use of this software 14 * 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 15 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission. 16 * without specific prior written permission.
22 * 17 *
@@ -33,29 +28,32 @@
33 * SUCH DAMAGE. 28 * SUCH DAMAGE.
34 */ 29 */
35 30
36#if defined(LIBC_SCCS) && !defined(lint)
37#if 0
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 */
43
44#include <netdb.h> 31#include <netdb.h>
32#include <stdio.h>
45 33
46extern int _proto_stayopen; 34int
35getprotobynumber_r(int num, struct protoent *pe, struct protoent_data *pd)
36{
37 int error;
38
39 setprotoent_r(pd->stayopen, pd);
40 while ((error = getprotoent_r(pe, pd)) == 0)
41 if (pe->p_proto == num)
42 break;
43 if (!pd->stayopen && pd->fp != NULL) {
44 (void)fclose(pd->fp);
45 pd->fp = NULL;
46 }
47 return (error);
48}
47 49
48struct protoent * 50struct protoent *
49getprotobynumber(proto) 51getprotobynumber(int num)
50 register int proto;
51{ 52{
52 register struct protoent *p; 53 extern struct protoent_data _protoent_data;
54 static struct protoent proto;
53 55
54 setprotoent(_proto_stayopen); 56 if (getprotobynumber_r(num, &proto, &_protoent_data) != 0)
55 while (p = getprotoent()) 57 return (NULL);
56 if (p->p_proto == proto) 58 return (&proto);
57 break;
58 if (!_proto_stayopen)
59 endprotoent();
60 return (p);
61} 59}