Some portability issues

Jeremy C. Reed reed at reedmedia.net
Fri Nov 3 09:39:35 PST 2006


> > conditionals are in proto). I believe that the better approach
> > would be to eradicate from all the sources such conditionals,
> > or possibly set them in Xos.h or Xosdefs.h (which of the two
> > would be the most appropriate?).
> 
> We should be getting rid of them and moving to autoconf functionality
> tests instead, but haven't had time to eradicate all of them.   For

The following patches for Xos_r.h.in and xproto's configure.ac are from 
DragonFly developer Joerg Sonnenberger available via the NetBSD Pkgsrc 
collection under pkgsrc/x11/xproto/patches/.

Today's pkgsrc commit message said: "Add patches to handle reentrancy in 
X11/Xos_r.h better by detecting via autoconf whether the interfaces are 
actually present."

These check for: readdir_r, getgrgid_r, getpwuid_r, gethostbyname_r, 
strtok_r, gmtime_r, ttyname_r.

Note this gets rid of the XUSE_MTSAFE_*API settings to use autoconf 
instead.

Any comments on this?


--- Xos_r.h.in.orig	2006-11-02 08:15:48.000000000 +0000
+++ Xos_r.h.in
@@ -188,6 +188,13 @@ extern void XtProcessUnlock(
 #  endif
 # endif
 
+#undef _XOS_R_H_MTSAFE_DIRENTAPI
+#undef _XOS_R_H_MTSAFE_NETDBAPI
+#undef _XOS_R_H_MTSAFE_PWDAPI
+#undef _XOS_R_H_MTSAFE_UNISTDAPI
+#undef _XOS_R_H_MTSAFE_STRINGAPI
+#undef _XOS_R_H_MTSAFE_TIMEAPI
+#undef _XOS_R_H_MTSAFE_GRPAPI
 #endif /* !defined WIN32 */
 
 /*
@@ -226,7 +233,7 @@ extern void XtProcessUnlock(
 
 #if defined(X_INCLUDE_PWD_H) && !defined(_XOS_INCLUDED_PWD_H)
 # include <pwd.h>
-# if defined(XUSE_MTSAFE_API) || defined(XUSE_MTSAFE_PWDAPI)
+# if defined(_XOS_MTSAFE_PWAPI)
 #  define XOS_USE_MTSAFE_PWDAPI 1
 # endif
 #endif
@@ -410,7 +417,7 @@ typedef int _Xgetpwret;
 #if defined(X_INCLUDE_NETDB_H) && !defined(_XOS_INCLUDED_NETDB_H) \
     && !defined(WIN32)
 # include <netdb.h>
-# if defined(XUSE_MTSAFE_API) || defined(XUSE_MTSAFE_NETDBAPI)
+# if defined(_XOS_R_H_MTSAFE_NETDBAPI)
 #  define XOS_USE_MTSAFE_NETDBAPI 1
 # endif
 #endif
@@ -573,7 +580,7 @@ typedef int _Xgetservbynameparams; /* du
 #   define dirent direct
 #  endif
 # endif
-# if defined(XUSE_MTSAFE_API) || defined(XUSE_MTSAFE_DIRENTAPI)
+# if defined(_XOS_R_H_MTSAFE_DIRENTAPI)
 #  define XOS_USE_MTSAFE_DIRENTAPI 1
 # endif
 #endif
@@ -691,7 +698,7 @@ extern int _Preaddir_r(DIR *, struct dir
 
 #if defined(X_INCLUDE_UNISTD_H) && !defined(_XOS_INCLUDED_UNISTD_H)
 /* <unistd.h> already included by <X11/Xos.h> */
-# if defined(XUSE_MTSAFE_API) || defined(XUSE_MTSAFE_UNISTDAPI)
+# if defined(_XOS_R_H__MTSAFE_UNISTDAPI)
 #  define XOS_USE_MTSAFE_UNISTDAPI 1
 # endif
 #endif
@@ -831,7 +838,7 @@ typedef struct {
 
 #if defined(X_INCLUDE_STRING_H) && !defined(_XOS_INCLUDED_STRING_H)
 /* <string.h> has already been included by <X11/Xos.h> */
-# if defined(XUSE_MTSAFE_API) || defined(XUSE_MTSAFE_STRINGAPI)
+# if defined(_XOS_R_H_MTSAFE_STRINGAPI)
 #  define XOS_USE_MTSAFE_STRINGAPI 1
 # endif
 #endif
@@ -883,7 +890,7 @@ typedef char * _Xstrtokparams;
 
 #if defined(X_INCLUDE_TIME_H) && !defined(_XOS_INCLUDED_TIME_H)
 # include <time.h>
-# if defined(XUSE_MTSAFE_API) || defined(XUSE_MTSAFE_TIMEAPI)
+# if defined(_XOS_R_H_MTSAFE_TIMEAPI)
 #  define XOS_USE_MTSAFE_TIMEAPI 1
 # endif
 #endif
@@ -1046,7 +1053,7 @@ typedef struct tm _Xltimeparams;
 
 #if defined(X_INCLUDE_GRP_H) && !defined(_XOS_INCLUDED_GRP_H)
 # include <grp.h>
-# if defined(XUSE_MTSAFE_API) || defined(XUSE_MTSAFE_GRPAPI)
+# if defined(_XOS_R_H_MTSAFE_GRPAPI)
 #  define XOS_USE_MTSAFE_GRPAPI 1
 # endif
 #endif



--- configure.ac.orig	2006-11-02 08:17:10.000000000 +0000
+++ configure.ac
@@ -4,6 +4,7 @@ AM_INIT_AUTOMAKE([foreign dist-bzip2])
 
 AC_CONFIG_HEADER([do-not-use-config.h])
 AC_CONFIG_HEADER([Xfuncproto.h])
+AC_CONFIG_HEADER([Xos_r.h])
 
 AC_CANONICAL_HOST
 
@@ -170,6 +171,15 @@ if test "x$WIDEPROTO" = xno; then
 	AC_DEFINE(NARROWPROTO, [], [Narrow prototypes])
 fi
 
+# Handle Xos_r.h
+AC_CHECK_FUNC(readdir_r, [AC_DEFINE(_XOS_R_H_MTSAFE_DIRENTAPI,[],[Assume has readdir_r and friends from dirent.h])],)
+AC_CHECK_FUNC(getgrgid_r, [AC_DEFINE(_XOS_R_H_MTSAFE_GRPAPI,[],[Assume has getgrgid_r and friends from grp.h])],)
+AC_CHECK_FUNC(getpwuid_r, [AC_DEFINE(_XOS_R_H_MTSAFE_PWDAPI,[],[Assume has getpwuid_r and friends from pwd.h])],)
+AC_CHECK_FUNC(gethostbyname_r, [AC_DEFINE(_XOS_R_H_MTSAFE_NETBDAPI,[],[Assume has gethostbyname_r and friends from netdb.h])],)
+AC_CHECK_FUNC(strtok_r, [AC_DEFINE(_XOS_R_H_MTSAFE_STRINGAPI,[],[Assume has strtok_r from string.h])],)
+AC_CHECK_FUNC(gmtime_r, [AC_DEFINE(_XOS_R_H_MTSAFE_TIMEAPI,[],[Assume has gmtime_r and friends from time.h])],)
+AC_CHECK_FUNC(ttyname_r, [AC_DEFINE(_XOS_R_H_MTSAFE_UNISTDAPI,[],[Assume has ttyname_r and friends from unistd.h])],)
+
 XORG_RELEASE_VERSION
 
 AC_OUTPUT([Makefile




More information about the xorg mailing list