summaryrefslogtreecommitdiffstats
path: root/src/include/fake-addrinfo.h
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2002-05-31 20:53:39 +0000
committerKen Raeburn <raeburn@mit.edu>2002-05-31 20:53:39 +0000
commit933efcddb5e4e17f3fcfcb963fc2ee7800df6ede (patch)
tree577954541e60f68d6f249efbc8fd0cdc334eeeb2 /src/include/fake-addrinfo.h
parentf6edb4cd732c30f4dd7f70814a808b95e9dead1e (diff)
downloadkrb5-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.h60
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 *,