diff options
Diffstat (limited to 'src/lib/libc/net/getservbyname.c')
-rw-r--r-- | src/lib/libc/net/getservbyname.c | 20 |
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) |
31 | static char rcsid[] = "$OpenBSD: getservbyname.c,v 1.8 2004/10/17 20:24:23 millert Exp $"; | 31 | static 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 | ||
38 | struct servent * | 38 | int |
39 | getservbyname_r(const char *name, const char *proto, struct servent *se, | 39 | getservbyname_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; |
53 | gotname: | 53 | gotname: |
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 | ||
64 | struct servent * | 64 | struct 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 | } |