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