Fix errno handling in posix_openpt.
authorAndreas Schwab <schwab@redhat.com>
Thu, 29 Oct 2009 18:27:53 +0000 (11:27 -0700)
committerUlrich Drepper <drepper@redhat.com>
Thu, 29 Oct 2009 18:27:53 +0000 (11:27 -0700)
The implementation of posix_openpt on Linux can fail in a few extra
ways if the appropriate pseudo filesystems are not mounted etc.  In
some of these cases we have to explicitly set errno.

ChangeLog
sysdeps/unix/sysv/linux/getpt.c

index 99088df..c46e962 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-10-27  Andreas Schwab  <schwab@redhat.com>
+
+       * sysdeps/unix/sysv/linux/getpt.c (__posix_openpt): Make sure
+       errno is always set when returning unsuccessfully.
+
 2009-10-29  Andreas Schwab  <schwab@redhat.com>
 
        * malloc/memusage.c (update_data): Fix index wraparound handling
index bb1ea47..6b26fdf 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2001, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Zack Weinberg <zack@rabi.phys.columbia.edu>, 1998.
 
@@ -64,9 +64,10 @@ __posix_openpt (oflag)
            }
 
          /* If /dev/pts is not mounted then the UNIX98 pseudo terminals
-             are not usable.  */
+            are not usable.  */
          __close (fd);
          have_no_dev_ptmx = 1;
+         __set_errno (ENOENT);
        }
       else
        {
@@ -76,6 +77,8 @@ __posix_openpt (oflag)
            return -1;
        }
     }
+  else
+    __set_errno (ENOENT);
 
   return -1;
 }