]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Hurd: fixes for ptsname and ptsname_r
authorPino Toscano <toscano.pino@tiscali.it>
Mon, 19 Nov 2012 23:49:11 +0000 (00:49 +0100)
committerPino Toscano <toscano.pino@tiscali.it>
Mon, 19 Nov 2012 23:49:11 +0000 (00:49 +0100)
ptsname_r on failure returns the value that is also set as errno; furthermore,
add more checks to it:
- set errno and return it on __term_get_peername failure
- set errno to ERANGE other than returning it
- change the type of PEERNAME to string_t, and check its length with __strnlen

In ptsname:
- change the type of PEERNAME to string_t
- do not set errno manually, since ptsname_r has set it already

ChangeLog
sysdeps/mach/hurd/ptsname.c

index 7e85f770162027b29fcbd9afd76a3881ec4ebb7b..55f5dde525704b321131bcf6bfe288b2fc98c634 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2012-11-19  Pino Toscano  <toscano.pino@tiscali.it>
+
+       * sysdeps/mach/hurd/ptsname.c (ptsname): Change the type of PEERNAME to
+       string_t.  Do not manually set errno.
+       (__ptsname_r): Change the type of PEERNAME to string_t, and check its
+       length with __strnlen.  Make sure to both set errno and return it on
+       failure.
+
 2012-11-19  David S. Miller  <davem@davemloft.net>
 
        With help from Joseph Myers.
index 1a32311fd4b2bab9e2e53fd213af3991dbb69c35..c7b52ff7af0734d0b3210b6b39a47e2fc2227018 100644 (file)
@@ -1,5 +1,5 @@
 /* ptsname -- return the name of a pty slave given an FD to the pty master
-   Copyright (C) 1999 Free Software Foundation, Inc.
+   Copyright (C) 1999-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 char *
 ptsname (int fd)
 {
-  static char peername[1024];  /* XXX */
+  static string_t peername;
   error_t err;
 
   err = __ptsname_r (fd, peername, sizeof (peername));
-  if (err)
-    __set_errno (err);
 
   return err ? NULL : peername;
 }
@@ -46,17 +44,19 @@ ptsname (int fd)
 int
 __ptsname_r (int fd, char *buf, size_t buflen)
 {
-  char peername[1024];  /* XXX */
+  string_t peername;
   size_t len;
   error_t err;
 
-  peername[0] = '\0';
   if (err = HURD_DPORT_USE (fd, __term_get_peername (port, peername)))
-    return _hurd_fd_error (fd, err);
+    return __hurd_dfail (fd, err), errno;
 
-  len = strlen (peername) + 1;
+  len = __strnlen (peername, sizeof peername - 1) + 1;
   if (len > buflen)
-    return ERANGE;
+    {
+      errno = ERANGE;
+      return ERANGE;
+    }
 
   memcpy (buf, peername, len);
   return 0;