diff options
| author | Ken Raeburn <raeburn@mit.edu> | 2002-05-31 20:53:39 +0000 |
|---|---|---|
| committer | Ken Raeburn <raeburn@mit.edu> | 2002-05-31 20:53:39 +0000 |
| commit | 933efcddb5e4e17f3fcfcb963fc2ee7800df6ede (patch) | |
| tree | 577954541e60f68d6f249efbc8fd0cdc334eeeb2 /src/include/fake-addrinfo.h | |
| parent | f6edb4cd732c30f4dd7f70814a808b95e9dead1e (diff) | |
| download | krb5-933efcddb5e4e17f3fcfcb963fc2ee7800df6ede.tar.gz krb5-933efcddb5e4e17f3fcfcb963fc2ee7800df6ede.tar.xz krb5-933efcddb5e4e17f3fcfcb963fc2ee7800df6ede.zip | |
* configure.in: Check return type for getservbyname_r just as for
gethostbyname_r.
* fake-addrinfo.h (GET_HOST_BY_NAME): Use plain gethostbyname if
THREADSAFE_GETHOSTBYNAME is defined, even if _r versions are available.
(GET_HOST_BY_ADDR) [GETHOSTBYNAME_R_RETURNS_INT]: Add missing variable
declaration.
(GET_SERV_BY_NAME, GET_SERV_BY_PORT): New macros, in three flavors, parallel to
GET_HOST macros; not used yet.
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@14461 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/include/fake-addrinfo.h')
| -rw-r--r-- | src/include/fake-addrinfo.h | 60 |
1 files changed, 58 insertions, 2 deletions
diff --git a/src/include/fake-addrinfo.h b/src/include/fake-addrinfo.h index d555726c8..10c9c3c2a 100644 --- a/src/include/fake-addrinfo.h +++ b/src/include/fake-addrinfo.h @@ -105,7 +105,7 @@ /* Do we actually have *any* systems we care about that don't provide either getaddrinfo or one of these two flavors of gethostbyname_r? */ -#ifndef HAVE_GETHOSTBYNAME_R +#if !defined(HAVE_GETHOSTBYNAME_R) || defined(THREADSAFE_GETHOSTBYNAME) #define GET_HOST_BY_NAME(NAME, HP, ERR) \ { (HP) = gethostbyname (NAME); (ERR) = h_errno; } #define GET_HOST_BY_ADDR(ADDR, ADDRLEN, FAMILY, HP, ERR) \ @@ -126,7 +126,7 @@ } #define GET_HOST_BY_ADDR(ADDR, ADDRLEN, FAMILY, HP, ERR) \ { \ - struct hostent my_h_ent; \ + struct hostent my_h_ent, *my_hp; \ int my_h_err; \ char my_h_buf[8192]; \ (HP) = (gethostbyaddr_r((ADDR), (ADDRLEN), (FAMILY), &my_h_ent, \ @@ -158,6 +158,62 @@ #endif #endif +/* Now do the same for getservby* functions. */ +#ifndef HAVE_GETSERVBYNAME_R +#define GET_SERV_BY_NAME(NAME, PROTO, SP, ERR) \ + ((SP) = getservbyname (NAME, PROTO), (ERR) = (SP) ? 0 : -1) +#define GET_SERV_BY_PORT(PORT, PROTO, SP, ERR) \ + ((SP) = getservbyport (PORT, PROTO), (ERR) = (SP) ? 0 : -1) +#else +#ifdef GETSERVBYNAME_R_RETURNS_INT +#define GET_SERV_BY_NAME(NAME, PROTO, SP, ERR) \ + { \ + struct servent my_s_ent, *my_sp; \ + int my_s_err; \ + char my_s_buf[8192]; \ + (SP) = (getservbyname_r((NAME), (PROTO), &my_s_ent, \ + my_s_buf, sizeof (my_s_buf), &my_sp, \ + &my_s_err) \ + ? 0 \ + : &my_s_ent); \ + (ERR) = my_s_err; \ + } +#define GET_SERV_BY_PORT(PORT, PROTO, SP, ERR) \ + { \ + struct servent my_s_ent, *my_sp; \ + int my_s_err; \ + char my_s_buf[8192]; \ + (SP) = (getservbyport_r((PORT), (PROTO), &my_s_ent, \ + my_s_buf, sizeof (my_s_buf), &my_sp, \ + &my_s_err) \ + ? 0 \ + : &my_s_ent); \ + (ERR) = my_s_err; \ + } +#else +/* returns ptr */ +#define GET_SERV_BY_NAME(NAME, PROTO, SP, ERR) \ + { \ + struct servent my_s_ent; \ + int my_s_err; \ + char my_s_buf[8192]; \ + (SP) = getservbyname_r((NAME), (PROTO), &my_s_ent, \ + my_s_buf, sizeof (my_s_buf), &my_s_err); \ + (ERR) = my_s_err; \ + } + +#define GET_SERV_BY_PORT(PORT, PROTO, SP, ERR) \ + { \ + struct servent my_s_ent; \ + int my_s_err; \ + char my_s_buf[8192]; \ + (SP) = getservbyport_r((PORT), (PROTO), &my_s_ent, \ + my_s_buf, sizeof (my_s_buf), &my_s_err); \ + (ERR) = my_s_err; \ + } +#endif +#endif + #ifdef WRAP_GETADDRINFO static int (*const gaiptr) (const char *, const char *, const struct addrinfo *, |
