]> granicus.if.org Git - php/commitdiff
Refix posix_ttyname(), test for a working implementation of ttyname_r() -- which...
authorSara Golemon <pollita@php.net>
Fri, 5 Jan 2007 21:30:06 +0000 (21:30 +0000)
committerSara Golemon <pollita@php.net>
Fri, 5 Jan 2007 21:30:06 +0000 (21:30 +0000)
ext/posix/config.m4
ext/posix/posix.c

index 9038330bb135298f4374598a9c199b12ae8daeab..f84facde60b1ffc61827842b0bfe6b32692bc269 100644 (file)
@@ -11,5 +11,22 @@ if test "$PHP_POSIX" = "yes"; then
 
   AC_CHECK_HEADERS(sys/mkdev.h)
 
-  AC_CHECK_FUNCS(seteuid setegid setsid getsid setpgid getpgid ctermid mkfifo mknod getrlimit getlogin getgroups makedev initgroups getpwuid_r getgrgid_r ttyname_r)
+  AC_CHECK_FUNCS(seteuid setegid setsid getsid setpgid getpgid ctermid mkfifo mknod getrlimit getlogin getgroups makedev initgroups getpwuid_r getgrgid_r)
+
+  AC_MSG_CHECKING([for working ttyname_r() implementation])
+  AC_TRY_RUN([
+#include <unistd.h>
+
+int main(int argc, char *argv[])
+{
+       char buf[64];
+
+       return ttyname_r(0, buf, 64) ? 1 : 0;
+}
+  ],[
+    AC_MSG_RESULT([yes])
+    AC_DEFINE(HAVE_TTYNAME_R, 1, [Whether you have a working ttyname_r])
+  ],[
+    AC_MSG_RESULT([no, posix_ttyname() will be thread-unsafe])
+  ])
 fi
index e9bfd1da661ebec838c27e3a3478e5db1746fb20..7809e48bf5028144fffc1882853ed53f18495423 100644 (file)
@@ -575,12 +575,7 @@ PHP_FUNCTION(posix_ttyname)
                        fd = Z_LVAL_PP(z_fd);
        }
 #if HAVE_TTYNAME_R
-#ifdef _SC_TTY_NAME_MAX
        buflen = sysconf(_SC_TTY_NAME_MAX);
-#else
-       /* Arbitrary buffer size for systems which don't extrospect their tty name lengths, way overkill */
-       buflen = 64;
-#endif
        p = emalloc(buflen);
 
        if (ttyname_r(fd, p, buflen)) {