xref: /csrg-svn/lib/libc/net/getservbyname.c (revision 33679)
1 /*
2  * Copyright (c) 1983 Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that this notice is preserved and that due credit is given
7  * to the University of California at Berkeley. The name of the University
8  * may not be used to endorse or promote products derived from this
9  * software without specific prior written permission. This software
10  * is provided ``as is'' without express or implied warranty.
11  */
12 
13 #if defined(LIBC_SCCS) && !defined(lint)
14 static char sccsid[] = "@(#)getservbyname.c	5.4 (Berkeley) 03/07/88";
15 #endif /* LIBC_SCCS and not lint */
16 
17 #include <netdb.h>
18 
19 extern int _serv_stayopen;
20 
21 struct servent *
22 getservbyname(name, proto)
23 	char *name, *proto;
24 {
25 	register struct servent *p;
26 	register char **cp;
27 
28 	setservent(_serv_stayopen);
29 	while (p = getservent()) {
30 		if (strcmp(name, p->s_name) == 0)
31 			goto gotname;
32 		for (cp = p->s_aliases; *cp; cp++)
33 			if (strcmp(name, *cp) == 0)
34 				goto gotname;
35 		continue;
36 gotname:
37 		if (proto == 0 || strcmp(p->s_proto, proto) == 0)
38 			break;
39 	}
40 	if (!_serv_stayopen)
41 		endservent();
42 	return (p);
43 }
44