+2012-10-02 Eric Blake <eblake@redhat.com>
+
+ ptsname: reject invalid file descriptors
+ http://www.austingroupbugs.net/view.php?id=503
+ * m4/ptsname.m4 (gl_FUNC_PTSNAME): Probe for FreeBSD bug.
+ * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Add new witness.
+ * modules/stdlib (Makefile.am): Replace witness.
+ * lib/stdlib.in.h (ptsname): Allow for replacement.
+ * modules/ptsname (configure.ac): Trigger replacement.
+ * doc/posix-functions/ptsname.texi (ptsname): Document this.
+
2012-10-02: Nikos Mavrogiannopoulos <nmav@gnutls.org> (tiny change)
hash-pjw-bare: new module
@item
This function is missing on some platforms:
Mac OS X 10.3, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, BeOS.
+@item
+This function fails to set errno on failure on some platforms:
+FreeBSD 8.2.
@end itemize
Portability problems not fixed by Gnulib:
#if @GNULIB_PTSNAME@
/* Return the pathname of the pseudo-terminal slave associated with
the master FD is open on, or NULL on errors. */
-# if !@HAVE_PTSNAME@
+# if @REPLACE_PTSNAME@
+# if !(defined __cplusplus && defined GNULIB_NAMESPCE)
+# undef ptsname
+# define ptsname rpl_ptsname
+# endif
+_GL_FUNCDECL_RPL (ptsname, char *, (int fd));
+_GL_CXXALIAS_RPL (ptsname, char *, (int fd));
+# else
+# if !@HAVE_PTSNAME@
_GL_FUNCDECL_SYS (ptsname, char *, (int fd));
-# endif
+# endif
_GL_CXXALIAS_SYS (ptsname, char *, (int fd));
+# endif
_GL_CXXALIASWARN (ptsname);
#elif defined GNULIB_POSIXCHECK
# undef ptsname
-# ptsname.m4 serial 2
+# ptsname.m4 serial 3
dnl Copyright (C) 2010-2012 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
AC_CHECK_FUNCS([ptsname])
if test $ac_cv_func_ptsname = no; then
HAVE_PTSNAME=0
+ else
+ AC_CACHE_CHECK([whether ptsname sets errno on failure],
+ [gl_cv_func_ptsname_sets_errno],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([[#include <errno.h>
+ ]], [[
+ return ptsname (-1) || !errno;
+ ]])],
+ [gl_cv_func_ptsname_sets_errno=yes],
+ [gl_cv_func_ptsname_sets_errno=no],
+ [case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu*) gl_cv_func_ptsname_sets_errno="guessing yes" ;;
+ # If we don't know, assume the worst.
+ *) gl_cv_func_ptsname_sets_errno="guessing no" ;;
+ esac
+ ])])
+ case $gl_cv_func_ptsname_sets_errno in
+ *no) REPLACE_PTSNAME=1 ;;
+ esac
fi
])
REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC])
REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC])
REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP])
+ REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME])
REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R])
REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV])
REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R])
configure.ac:
gl_FUNC_PTSNAME
-if test $HAVE_PTSNAME = 0; then
+if test $HAVE_PTSNAME = 0 || test $REPLACE_PTSNAME = 1; then
AC_LIBOBJ([ptsname])
gl_PREREQ_PTSNAME
fi
-e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \
-e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \
-e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
+ -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \
-e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \
-e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
-e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \