Add sys/loadavg.h
[kopensolaris-gnu/glibc.git] / sysdeps / unix / grantpt.c
index dad7d16..bdedbac 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Zack Weinberg <zack@rabi.phys.columbia.edu>, 1998.
 
@@ -49,10 +49,19 @@ pts_name (int fd, char **pts, size_t buf_len)
       if (buf_len)
        {
          rv = __ptsname_r (fd, buf, buf_len);
-
-         if (rv != 0 || memchr (buf, '\0', buf_len))
-           /* We either got an error, or we succeeded and the
-              returned name fit in the buffer.  */
+         if (rv != 0)
+           {
+             if (rv == ENOTTY)
+               /* ptsname_r returns with ENOTTY to indicate
+                  a descriptor not referring to a pty master.
+                  For this condition, grantpt must return EINVAL.  */
+               rv = EINVAL;
+             errno = rv;       /* Not necessarily set by __ptsname_r.  */
+             break;
+           }
+
+         if (memchr (buf, '\0', buf_len))
+           /* We succeeded and the returned name fit in the buffer.  */
            break;
 
          /* Try again with a longer buffer.  */
@@ -121,7 +130,7 @@ grantpt (int fd)
     }
 
   /* Get the group ID of the special `tty' group.  */
-  if (grbuflen == -1)
+  if (grbuflen == (size_t) -1L)
     /* `sysconf' does not support _SC_GETGR_R_SIZE_MAX.
        Try a moderate value.  */
     grbuflen = 1024;