summaryrefslogtreecommitdiff
path: root/src/lib/libc/net/getservbyname.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libc/net/getservbyname.c')
-rw-r--r--src/lib/libc/net/getservbyname.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/lib/libc/net/getservbyname.c b/src/lib/libc/net/getservbyname.c
index 25f0e27d06..7375c89404 100644
--- a/src/lib/libc/net/getservbyname.c
+++ b/src/lib/libc/net/getservbyname.c
@@ -32,21 +32,28 @@
32 */ 32 */
33 33
34#if defined(LIBC_SCCS) && !defined(lint) 34#if defined(LIBC_SCCS) && !defined(lint)
35static char rcsid[] = "$OpenBSD: getservbyname.c,v 1.3 1997/07/09 01:08:34 millert Exp $"; 35static char rcsid[] = "$OpenBSD: getservbyname.c,v 1.4 1998/11/20 11:18:44 d Exp $";
36#endif /* LIBC_SCCS and not lint */ 36#endif /* LIBC_SCCS and not lint */
37 37
38#include <netdb.h> 38#include <netdb.h>
39#include <string.h> 39#include <string.h>
40#include "thread_private.h"
40 41
41extern int _serv_stayopen; 42extern int _serv_stayopen;
42 43
44_THREAD_PRIVATE_MUTEX(getservbyname_r)
45
43struct servent * 46struct servent *
44getservbyname(name, proto) 47getservbyname_r(name, proto, se, buf, buflen)
45 const char *name, *proto; 48 const char *name, *proto;
49 struct servent *se;
50 char *buf;
51 int buflen;
46{ 52{
47 register struct servent *p; 53 register struct servent *p;
48 register char **cp; 54 register char **cp;
49 55
56 _THREAD_PRIVATE_MUTEX_LOCK(getservbyname_r);
50 setservent(_serv_stayopen); 57 setservent(_serv_stayopen);
51 while ((p = getservent())) { 58 while ((p = getservent())) {
52 if (strcmp(name, p->s_name) == 0) 59 if (strcmp(name, p->s_name) == 0)
@@ -61,5 +68,20 @@ gotname:
61 } 68 }
62 if (!_serv_stayopen) 69 if (!_serv_stayopen)
63 endservent(); 70 endservent();
71 _THREAD_PRIVATE_MUTEX_UNLOCK(getservbyname_r);
64 return (p); 72 return (p);
65} 73}
74
75struct servent *getservbyname(name, proto)
76 const char *name, *proto;
77{
78 _THREAD_PRIVATE_KEY(getservbyname)
79 static char buf[4096];
80 char *bufp = (char*)_THREAD_PRIVATE(getservbyname, buf, NULL);
81
82 if (bufp == NULL)
83 return (NULL);
84 return getservbyname_r(name, proto, (struct servent*) bufp,
85 bufp + sizeof(struct servent),
86 sizeof buf - sizeof(struct servent) );
87}