FreeBSD port (31): grantpt error code

Bruno Haible bruno@clisp.org
Fri Jul 12 04:35:00 GMT 2002


Hi,

The tst-grantpt fails on FreeBSD, because when the file descriptor is
invalid or points to a regular file, the function __ptsname_r fails with
error code ENOTTY, whereas the test expect the error codes EBADF and EINVAL
from the grantpt() function.

Since neither the SUSV3 nor the glibc manual specifies an explicit error
codes for ptsname(), I believe it's the duty of grantpt() function to provide
the necessary error code. Here is a patch.


2002-07-06  Bruno Haible  <bruno@clisp.org>

	* sysdeps/unix/grantpt.c (grantpt): Provide the right error code
	if pts_name fails.

diff -r -c3 glibc-20020627.bak/sysdeps/unix/grantpt.c glibc-20020627/sysdeps/unix/grantpt.c
--- glibc-20020627.bak/sysdeps/unix/grantpt.c	Mon Apr 15 20:55:47 2002
+++ glibc-20020627/sysdeps/unix/grantpt.c	Fri Jul  5 01:17:11 2002
@@ -19,6 +19,7 @@
 
 #include <assert.h>
 #include <errno.h>
+#include <fcntl.h>
 #include <grp.h>
 #include <limits.h>
 #include <stdlib.h>
@@ -107,7 +108,16 @@
   pid_t pid;
 
   if (pts_name (fd, &buf, sizeof (_buf)))
-    return -1;
+    {
+      if (errno == ENOTTY)
+	{
+	  if (__fcntl (fd, F_GETFD, 0) < 0)
+	    __set_errno (EBADF);
+	  else
+	    __set_errno (EINVAL);
+	}
+      return -1;
+    }
 
   if (__xstat64 (_STAT_VER, buf, &st) < 0)
     goto cleanup;



More information about the Libc-alpha mailing list