public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] linux ttyname and ttyname_r: do not return wrong results
  2016-11-08 16:56 [PATCH] linux ttyname and ttyname_r: do not return wrong results Christian Brauner
@ 2016-11-08 16:56 ` Christian Brauner
  2016-11-10 18:04   ` Serge E. Hallyn
  2016-11-22  2:10   ` Dmitry V. Levin
  2016-11-22  0:14 ` Christian Brauner
  1 sibling, 2 replies; 5+ messages in thread
From: Christian Brauner @ 2016-11-08 16:56 UTC (permalink / raw)
  To: libc-alpha, serge; +Cc: Christian Brauner

If a link (say /proc/self/fd/0) pointing to a device, say /dev/pts/2, in a
parent mount namespace is passed to ttyname, and a /dev/pts/2 exists (in a
different devpts) in the current namespace, then it returns /dev/pts/2. But
/dev/pts/2 is NOT the current tty, it is a different file and device.

Detect this case and return ENODEV. Userspace can choose to take this as a hint
that the fd points to a tty device but to act on the fd rather than the link.

Signed-off-by: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Christian Brauner <christian.brauner@canonical.com>
---
Changelog: 2016-11-08
	- remove obsolete comment in ttyname_r.c
	- move is_pty() to common header file and mark as static inline
---
 sysdeps/unix/sysv/linux/ttyname.c   | 17 +++++++++++++----
 sysdeps/unix/sysv/linux/ttyname.h   | 35 +++++++++++++++++++++++++++++++++++
 sysdeps/unix/sysv/linux/ttyname_r.c | 18 ++++++++++++++----
 3 files changed, 62 insertions(+), 8 deletions(-)
 create mode 100644 sysdeps/unix/sysv/linux/ttyname.h

diff --git a/sysdeps/unix/sysv/linux/ttyname.c b/sysdeps/unix/sysv/linux/ttyname.c
index 7a001b4..dabed22 100644
--- a/sysdeps/unix/sysv/linux/ttyname.c
+++ b/sysdeps/unix/sysv/linux/ttyname.c
@@ -25,9 +25,12 @@
 #include <unistd.h>
 #include <string.h>
 #include <stdlib.h>
+#include <sys/sysmacros.h>
 
 #include <_itoa.h>
 
+#include "ttyname.h"
+
 #if 0
 /* Is this used anywhere?  It is not exported.  */
 char *__ttyname;
@@ -170,12 +173,18 @@ ttyname (int fd)
 #ifdef _STATBUF_ST_RDEV
 	  && S_ISCHR (st1.st_mode)
 	  && st1.st_rdev == st.st_rdev
-#else
-	  && st1.st_ino == st.st_ino
-	  && st1.st_dev == st.st_dev
 #endif
-	  )
+	  && st1.st_ino == st.st_ino
+	  && st1.st_dev == st.st_dev)
 	return ttyname_buf;
+
+      /* If the link doesn't exist, then it points to a device in another
+	 namespace. */
+      if (is_pty (&st))
+	{
+	  __set_errno (ENODEV);
+	  return NULL;
+	}
     }
 
   if (__xstat64 (_STAT_VER, "/dev/pts", &st1) == 0 && S_ISDIR (st1.st_mode))
diff --git a/sysdeps/unix/sysv/linux/ttyname.h b/sysdeps/unix/sysv/linux/ttyname.h
new file mode 100644
index 0000000..19af6e6
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/ttyname.h
@@ -0,0 +1,35 @@
+/* Copyright (C) 2004-2016 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
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If
+   not, see <http://www.gnu.org/licenses/>.  */
+
+#include <unistd.h>
+#include <sys/sysmacros.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+/* Return true if this is a UNIX98 pty device, as defined in
+   linux/Documentation/devices.txt.  */
+static inline int
+is_pty (struct stat64 *sb)
+{
+#ifdef _STATBUF_ST_RDEV
+  int m = major (sb->st_rdev);
+  return (136 <= m && m <= 143);
+#else
+  return false;
+#endif
+}
+
diff --git a/sysdeps/unix/sysv/linux/ttyname_r.c b/sysdeps/unix/sysv/linux/ttyname_r.c
index d15bc74..542114b 100644
--- a/sysdeps/unix/sysv/linux/ttyname_r.c
+++ b/sysdeps/unix/sysv/linux/ttyname_r.c
@@ -25,9 +25,12 @@
 #include <unistd.h>
 #include <string.h>
 #include <stdlib.h>
+#include <sys/sysmacros.h>
 
 #include <_itoa.h>
 
+#include "ttyname.h"
+
 static int getttyname_r (char *buf, size_t buflen,
 			 dev_t mydev, ino64_t myino, int save,
 			 int *dostat) internal_function;
@@ -152,12 +155,19 @@ __ttyname_r (int fd, char *buf, size_t buflen)
 #ifdef _STATBUF_ST_RDEV
 	  && S_ISCHR (st1.st_mode)
 	  && st1.st_rdev == st.st_rdev
-#else
-	  && st1.st_ino == st.st_ino
-	  && st1.st_dev == st.st_dev
 #endif
-	  )
+	  && st1.st_ino == st.st_ino
+	  && st1.st_dev == st.st_dev)
 	return 0;
+
+      /* If the link doesn't exist, then it points to a device in another
+       * namespace.
+       */
+      if (is_pty (&st))
+	{
+	  __set_errno (ENODEV);
+	  return ENODEV;
+	}
     }
 
   /* Prepare the result buffer.  */
-- 
2.9.3

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH] linux ttyname and ttyname_r: do not return wrong results
@ 2016-11-08 16:56 Christian Brauner
  2016-11-08 16:56 ` Christian Brauner
  2016-11-22  0:14 ` Christian Brauner
  0 siblings, 2 replies; 5+ messages in thread
From: Christian Brauner @ 2016-11-08 16:56 UTC (permalink / raw)
  To: libc-alpha, serge; +Cc: Christian Brauner

Hi,

I've taken over this patch from Serge who has been informed and is CCed on this
thread. There are no significant functional changes. As requested the following
this have been changed:

- remove obsolete comment in ttyname_r.c
- move is_pty() to common header file and mark as static inline

I hope this covers everything. :)

Christian

Christian Brauner (1):
  linux ttyname and ttyname_r: do not return wrong results

 sysdeps/unix/sysv/linux/ttyname.c   | 17 +++++++++++++----
 sysdeps/unix/sysv/linux/ttyname.h   | 35 +++++++++++++++++++++++++++++++++++
 sysdeps/unix/sysv/linux/ttyname_r.c | 18 ++++++++++++++----
 3 files changed, 62 insertions(+), 8 deletions(-)
 create mode 100644 sysdeps/unix/sysv/linux/ttyname.h

-- 
2.9.3

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] linux ttyname and ttyname_r: do not return wrong results
  2016-11-08 16:56 ` Christian Brauner
@ 2016-11-10 18:04   ` Serge E. Hallyn
  2016-11-22  2:10   ` Dmitry V. Levin
  1 sibling, 0 replies; 5+ messages in thread
From: Serge E. Hallyn @ 2016-11-10 18:04 UTC (permalink / raw)
  To: Christian Brauner; +Cc: libc-alpha, serge

Quoting Christian Brauner (christian.brauner@canonical.com):
> If a link (say /proc/self/fd/0) pointing to a device, say /dev/pts/2, in a
> parent mount namespace is passed to ttyname, and a /dev/pts/2 exists (in a
> different devpts) in the current namespace, then it returns /dev/pts/2. But
> /dev/pts/2 is NOT the current tty, it is a different file and device.
> 
> Detect this case and return ENODEV. Userspace can choose to take this as a hint
> that the fd points to a tty device but to act on the fd rather than the link.
> 
> Signed-off-by: Serge Hallyn <serge@hallyn.com>
> Signed-off-by: Christian Brauner <christian.brauner@canonical.com>

Thanks !

> ---
> Changelog: 2016-11-08
> 	- remove obsolete comment in ttyname_r.c
> 	- move is_pty() to common header file and mark as static inline
> ---
>  sysdeps/unix/sysv/linux/ttyname.c   | 17 +++++++++++++----
>  sysdeps/unix/sysv/linux/ttyname.h   | 35 +++++++++++++++++++++++++++++++++++
>  sysdeps/unix/sysv/linux/ttyname_r.c | 18 ++++++++++++++----
>  3 files changed, 62 insertions(+), 8 deletions(-)
>  create mode 100644 sysdeps/unix/sysv/linux/ttyname.h
> 
> diff --git a/sysdeps/unix/sysv/linux/ttyname.c b/sysdeps/unix/sysv/linux/ttyname.c
> index 7a001b4..dabed22 100644
> --- a/sysdeps/unix/sysv/linux/ttyname.c
> +++ b/sysdeps/unix/sysv/linux/ttyname.c
> @@ -25,9 +25,12 @@
>  #include <unistd.h>
>  #include <string.h>
>  #include <stdlib.h>
> +#include <sys/sysmacros.h>
>  
>  #include <_itoa.h>
>  
> +#include "ttyname.h"
> +
>  #if 0
>  /* Is this used anywhere?  It is not exported.  */
>  char *__ttyname;
> @@ -170,12 +173,18 @@ ttyname (int fd)
>  #ifdef _STATBUF_ST_RDEV
>  	  && S_ISCHR (st1.st_mode)
>  	  && st1.st_rdev == st.st_rdev
> -#else
> -	  && st1.st_ino == st.st_ino
> -	  && st1.st_dev == st.st_dev
>  #endif
> -	  )
> +	  && st1.st_ino == st.st_ino
> +	  && st1.st_dev == st.st_dev)
>  	return ttyname_buf;
> +
> +      /* If the link doesn't exist, then it points to a device in another
> +	 namespace. */
> +      if (is_pty (&st))
> +	{
> +	  __set_errno (ENODEV);
> +	  return NULL;
> +	}
>      }
>  
>    if (__xstat64 (_STAT_VER, "/dev/pts", &st1) == 0 && S_ISDIR (st1.st_mode))
> diff --git a/sysdeps/unix/sysv/linux/ttyname.h b/sysdeps/unix/sysv/linux/ttyname.h
> new file mode 100644
> index 0000000..19af6e6
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/ttyname.h
> @@ -0,0 +1,35 @@
> +/* Copyright (C) 2004-2016 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
> +   modify it under the terms of the GNU Lesser General Public License as
> +   published by the Free Software Foundation; either version 2.1 of the
> +   License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; see the file COPYING.LIB.  If
> +   not, see <http://www.gnu.org/licenses/>.  */
> +
> +#include <unistd.h>
> +#include <sys/sysmacros.h>
> +#include <sys/types.h>
> +#include <sys/stat.h>
> +
> +/* Return true if this is a UNIX98 pty device, as defined in
> +   linux/Documentation/devices.txt.  */
> +static inline int
> +is_pty (struct stat64 *sb)
> +{
> +#ifdef _STATBUF_ST_RDEV
> +  int m = major (sb->st_rdev);
> +  return (136 <= m && m <= 143);
> +#else
> +  return false;
> +#endif
> +}
> +
> diff --git a/sysdeps/unix/sysv/linux/ttyname_r.c b/sysdeps/unix/sysv/linux/ttyname_r.c
> index d15bc74..542114b 100644
> --- a/sysdeps/unix/sysv/linux/ttyname_r.c
> +++ b/sysdeps/unix/sysv/linux/ttyname_r.c
> @@ -25,9 +25,12 @@
>  #include <unistd.h>
>  #include <string.h>
>  #include <stdlib.h>
> +#include <sys/sysmacros.h>
>  
>  #include <_itoa.h>
>  
> +#include "ttyname.h"
> +
>  static int getttyname_r (char *buf, size_t buflen,
>  			 dev_t mydev, ino64_t myino, int save,
>  			 int *dostat) internal_function;
> @@ -152,12 +155,19 @@ __ttyname_r (int fd, char *buf, size_t buflen)
>  #ifdef _STATBUF_ST_RDEV
>  	  && S_ISCHR (st1.st_mode)
>  	  && st1.st_rdev == st.st_rdev
> -#else
> -	  && st1.st_ino == st.st_ino
> -	  && st1.st_dev == st.st_dev
>  #endif
> -	  )
> +	  && st1.st_ino == st.st_ino
> +	  && st1.st_dev == st.st_dev)
>  	return 0;
> +
> +      /* If the link doesn't exist, then it points to a device in another
> +       * namespace.
> +       */
> +      if (is_pty (&st))
> +	{
> +	  __set_errno (ENODEV);
> +	  return ENODEV;
> +	}
>      }
>  
>    /* Prepare the result buffer.  */
> -- 
> 2.9.3

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] linux ttyname and ttyname_r: do not return wrong results
  2016-11-08 16:56 [PATCH] linux ttyname and ttyname_r: do not return wrong results Christian Brauner
  2016-11-08 16:56 ` Christian Brauner
@ 2016-11-22  0:14 ` Christian Brauner
  1 sibling, 0 replies; 5+ messages in thread
From: Christian Brauner @ 2016-11-22  0:14 UTC (permalink / raw)
  To: libc-alpha, serge; +Cc: stgraber

Hi,

just a friendly check whether you'd be fine with including the patch in its
current form.

Christian

On Tue, Nov 08, 2016 at 05:56:37PM +0100, Christian Brauner wrote:
> Hi,
> 
> I've taken over this patch from Serge who has been informed and is CCed on this
> thread. There are no significant functional changes. As requested the following
> this have been changed:
> 
> - remove obsolete comment in ttyname_r.c
> - move is_pty() to common header file and mark as static inline
> 
> I hope this covers everything. :)
> 
> Christian
> 
> Christian Brauner (1):
>   linux ttyname and ttyname_r: do not return wrong results
> 
>  sysdeps/unix/sysv/linux/ttyname.c   | 17 +++++++++++++----
>  sysdeps/unix/sysv/linux/ttyname.h   | 35 +++++++++++++++++++++++++++++++++++
>  sysdeps/unix/sysv/linux/ttyname_r.c | 18 ++++++++++++++----
>  3 files changed, 62 insertions(+), 8 deletions(-)
>  create mode 100644 sysdeps/unix/sysv/linux/ttyname.h
> 
> -- 
> 2.9.3
> 

On Tue, Nov 08, 2016 at 05:56:38PM +0100, Christian Brauner wrote:
> If a link (say /proc/self/fd/0) pointing to a device, say /dev/pts/2, in a
> parent mount namespace is passed to ttyname, and a /dev/pts/2 exists (in a
> different devpts) in the current namespace, then it returns /dev/pts/2. But
> /dev/pts/2 is NOT the current tty, it is a different file and device.
> 
> Detect this case and return ENODEV. Userspace can choose to take this as a hint
> that the fd points to a tty device but to act on the fd rather than the link.
> 
> Signed-off-by: Serge Hallyn <serge@hallyn.com>
> Signed-off-by: Christian Brauner <christian.brauner@canonical.com>
> ---
> Changelog: 2016-11-08
> 	- remove obsolete comment in ttyname_r.c
> 	- move is_pty() to common header file and mark as static inline
> ---
>  sysdeps/unix/sysv/linux/ttyname.c   | 17 +++++++++++++----
>  sysdeps/unix/sysv/linux/ttyname.h   | 35 +++++++++++++++++++++++++++++++++++
>  sysdeps/unix/sysv/linux/ttyname_r.c | 18 ++++++++++++++----
>  3 files changed, 62 insertions(+), 8 deletions(-)
>  create mode 100644 sysdeps/unix/sysv/linux/ttyname.h
> 
> diff --git a/sysdeps/unix/sysv/linux/ttyname.c b/sysdeps/unix/sysv/linux/ttyname.c
> index 7a001b4..dabed22 100644
> --- a/sysdeps/unix/sysv/linux/ttyname.c
> +++ b/sysdeps/unix/sysv/linux/ttyname.c
> @@ -25,9 +25,12 @@
>  #include <unistd.h>
>  #include <string.h>
>  #include <stdlib.h>
> +#include <sys/sysmacros.h>
>  
>  #include <_itoa.h>
>  
> +#include "ttyname.h"
> +
>  #if 0
>  /* Is this used anywhere?  It is not exported.  */
>  char *__ttyname;
> @@ -170,12 +173,18 @@ ttyname (int fd)
>  #ifdef _STATBUF_ST_RDEV
>  	  && S_ISCHR (st1.st_mode)
>  	  && st1.st_rdev == st.st_rdev
> -#else
> -	  && st1.st_ino == st.st_ino
> -	  && st1.st_dev == st.st_dev
>  #endif
> -	  )
> +	  && st1.st_ino == st.st_ino
> +	  && st1.st_dev == st.st_dev)
>  	return ttyname_buf;
> +
> +      /* If the link doesn't exist, then it points to a device in another
> +	 namespace. */
> +      if (is_pty (&st))
> +	{
> +	  __set_errno (ENODEV);
> +	  return NULL;
> +	}
>      }
>  
>    if (__xstat64 (_STAT_VER, "/dev/pts", &st1) == 0 && S_ISDIR (st1.st_mode))
> diff --git a/sysdeps/unix/sysv/linux/ttyname.h b/sysdeps/unix/sysv/linux/ttyname.h
> new file mode 100644
> index 0000000..19af6e6
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/ttyname.h
> @@ -0,0 +1,35 @@
> +/* Copyright (C) 2004-2016 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
> +   modify it under the terms of the GNU Lesser General Public License as
> +   published by the Free Software Foundation; either version 2.1 of the
> +   License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; see the file COPYING.LIB.  If
> +   not, see <http://www.gnu.org/licenses/>.  */
> +
> +#include <unistd.h>
> +#include <sys/sysmacros.h>
> +#include <sys/types.h>
> +#include <sys/stat.h>
> +
> +/* Return true if this is a UNIX98 pty device, as defined in
> +   linux/Documentation/devices.txt.  */
> +static inline int
> +is_pty (struct stat64 *sb)
> +{
> +#ifdef _STATBUF_ST_RDEV
> +  int m = major (sb->st_rdev);
> +  return (136 <= m && m <= 143);
> +#else
> +  return false;
> +#endif
> +}
> +
> diff --git a/sysdeps/unix/sysv/linux/ttyname_r.c b/sysdeps/unix/sysv/linux/ttyname_r.c
> index d15bc74..542114b 100644
> --- a/sysdeps/unix/sysv/linux/ttyname_r.c
> +++ b/sysdeps/unix/sysv/linux/ttyname_r.c
> @@ -25,9 +25,12 @@
>  #include <unistd.h>
>  #include <string.h>
>  #include <stdlib.h>
> +#include <sys/sysmacros.h>
>  
>  #include <_itoa.h>
>  
> +#include "ttyname.h"
> +
>  static int getttyname_r (char *buf, size_t buflen,
>  			 dev_t mydev, ino64_t myino, int save,
>  			 int *dostat) internal_function;
> @@ -152,12 +155,19 @@ __ttyname_r (int fd, char *buf, size_t buflen)
>  #ifdef _STATBUF_ST_RDEV
>  	  && S_ISCHR (st1.st_mode)
>  	  && st1.st_rdev == st.st_rdev
> -#else
> -	  && st1.st_ino == st.st_ino
> -	  && st1.st_dev == st.st_dev
>  #endif
> -	  )
> +	  && st1.st_ino == st.st_ino
> +	  && st1.st_dev == st.st_dev)
>  	return 0;
> +
> +      /* If the link doesn't exist, then it points to a device in another
> +       * namespace.
> +       */
> +      if (is_pty (&st))
> +	{
> +	  __set_errno (ENODEV);
> +	  return ENODEV;
> +	}
>      }
>  
>    /* Prepare the result buffer.  */
> -- 
> 2.9.3
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] linux ttyname and ttyname_r: do not return wrong results
  2016-11-08 16:56 ` Christian Brauner
  2016-11-10 18:04   ` Serge E. Hallyn
@ 2016-11-22  2:10   ` Dmitry V. Levin
  1 sibling, 0 replies; 5+ messages in thread
From: Dmitry V. Levin @ 2016-11-22  2:10 UTC (permalink / raw)
  To: Christian Brauner; +Cc: libc-alpha, Serge Hallyn

On Tue, Nov 08, 2016 at 05:56:38PM +0100, Christian Brauner wrote:
> If a link (say /proc/self/fd/0) pointing to a device, say /dev/pts/2, in a
> parent mount namespace is passed to ttyname, and a /dev/pts/2 exists (in a
> different devpts) in the current namespace, then it returns /dev/pts/2. But
> /dev/pts/2 is NOT the current tty, it is a different file and device.
> 
> Detect this case and return ENODEV. Userspace can choose to take this as a hint
> that the fd points to a tty device but to act on the fd rather than the link.
> 
> Signed-off-by: Serge Hallyn <serge@hallyn.com>
> Signed-off-by: Christian Brauner <christian.brauner@canonical.com>
> ---
> Changelog: 2016-11-08
> 	- remove obsolete comment in ttyname_r.c
> 	- move is_pty() to common header file and mark as static inline
> ---
>  sysdeps/unix/sysv/linux/ttyname.c   | 17 +++++++++++++----
>  sysdeps/unix/sysv/linux/ttyname.h   | 35 +++++++++++++++++++++++++++++++++++
>  sysdeps/unix/sysv/linux/ttyname_r.c | 18 ++++++++++++++----
>  3 files changed, 62 insertions(+), 8 deletions(-)
>  create mode 100644 sysdeps/unix/sysv/linux/ttyname.h
> 
> diff --git a/sysdeps/unix/sysv/linux/ttyname.c b/sysdeps/unix/sysv/linux/ttyname.c
> index 7a001b4..dabed22 100644
> --- a/sysdeps/unix/sysv/linux/ttyname.c
> +++ b/sysdeps/unix/sysv/linux/ttyname.c
> @@ -25,9 +25,12 @@
>  #include <unistd.h>
>  #include <string.h>
>  #include <stdlib.h>
> +#include <sys/sysmacros.h>

This is probably a leftover from previous editions and could be safely removed.

[...]
> diff --git a/sysdeps/unix/sysv/linux/ttyname_r.c b/sysdeps/unix/sysv/linux/ttyname_r.c
> index d15bc74..542114b 100644
> --- a/sysdeps/unix/sysv/linux/ttyname_r.c
> +++ b/sysdeps/unix/sysv/linux/ttyname_r.c
> @@ -25,9 +25,12 @@
>  #include <unistd.h>
>  #include <string.h>
>  #include <stdlib.h>
> +#include <sys/sysmacros.h>

Likewise.

Besides that, it looks good.


-- 
ldv

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-11-22  2:10 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-11-08 16:56 [PATCH] linux ttyname and ttyname_r: do not return wrong results Christian Brauner
2016-11-08 16:56 ` Christian Brauner
2016-11-10 18:04   ` Serge E. Hallyn
2016-11-22  2:10   ` Dmitry V. Levin
2016-11-22  0:14 ` Christian Brauner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).