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.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/lib/libc/net/getservbyname.c b/src/lib/libc/net/getservbyname.c
index 597c42497f..062318630f 100644
--- a/src/lib/libc/net/getservbyname.c
+++ b/src/lib/libc/net/getservbyname.c
@@ -28,37 +28,37 @@
28 */ 28 */
29 29
30#if defined(LIBC_SCCS) && !defined(lint) 30#if defined(LIBC_SCCS) && !defined(lint)
31static char rcsid[] = "$OpenBSD: getservbyname.c,v 1.8 2004/10/17 20:24:23 millert Exp $"; 31static char rcsid[] = "$OpenBSD: getservbyname.c,v 1.9 2004/10/25 03:09:01 millert Exp $";
32#endif /* LIBC_SCCS and not lint */ 32#endif /* LIBC_SCCS and not lint */
33 33
34#include <netdb.h> 34#include <netdb.h>
35#include <stdio.h> 35#include <stdio.h>
36#include <string.h> 36#include <string.h>
37 37
38struct servent * 38int
39getservbyname_r(const char *name, const char *proto, struct servent *se, 39getservbyname_r(const char *name, const char *proto, struct servent *se,
40 struct servent_data *sd) 40 struct servent_data *sd)
41{ 41{
42 struct servent *p;
43 char **cp; 42 char **cp;
43 int error;
44 44
45 setservent_r(sd->stayopen, sd); 45 setservent_r(sd->stayopen, sd);
46 while ((p = getservent_r(se, sd))) { 46 while ((error = getservent_r(se, sd)) == 0) {
47 if (strcmp(name, p->s_name) == 0) 47 if (strcmp(name, se->s_name) == 0)
48 goto gotname; 48 goto gotname;
49 for (cp = p->s_aliases; *cp; cp++) 49 for (cp = se->s_aliases; *cp; cp++)
50 if (strcmp(name, *cp) == 0) 50 if (strcmp(name, *cp) == 0)
51 goto gotname; 51 goto gotname;
52 continue; 52 continue;
53gotname: 53gotname:
54 if (proto == 0 || strcmp(p->s_proto, proto) == 0) 54 if (proto == 0 || strcmp(se->s_proto, proto) == 0)
55 break; 55 break;
56 } 56 }
57 if (!sd->stayopen && sd->fp != NULL) { 57 if (!sd->stayopen && sd->fp != NULL) {
58 fclose(sd->fp); 58 fclose(sd->fp);
59 sd->fp = NULL; 59 sd->fp = NULL;
60 } 60 }
61 return (p); 61 return (error);
62} 62}
63 63
64struct servent * 64struct servent *
@@ -67,5 +67,7 @@ getservbyname(const char *name, const char *proto)
67 extern struct servent_data _servent_data; 67 extern struct servent_data _servent_data;
68 static struct servent serv; 68 static struct servent serv;
69 69
70 return (getservbyname_r(name, proto, &serv, &_servent_data)); 70 if (getservbyname_r(name, proto, &serv, &_servent_data) != 0)
71 return (NULL);
72 return (&serv);
71} 73}