Message ID | 20160415184746.GA10830@ubuntumail |
---|---|
State | New |
Headers | show |
On 15 Apr 2016 18:47, Serge Hallyn wrote: > Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com> we don't use s-o-b tags > +/* > + * Return true if this is a UNIX98 pty device, as defined in > + * linux/Documentation/devices.txt > + */ GNU style is: /* Return true if this is a UNIX98 pty device, as defined in linux/Documentation/devices.txt. */ this applies to comments below too > + if (is_pty (st) && strlen (procname) < buflen - 1) > + { > + memcpy (ttyname_buf, procname, strlen (procname)); > + ttyname_buf[strlen (procname)] = '\0'; since you already verified buflen, why not use strcpy ? also, GNU style says 8 spaces -> 1 tab -mike
Quoting Mike Frysinger (vapier@gentoo.org): > On 15 Apr 2016 18:47, Serge Hallyn wrote: > > Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com> > > we don't use s-o-b tags > > > +/* > > + * Return true if this is a UNIX98 pty device, as defined in > > + * linux/Documentation/devices.txt > > + */ > > GNU style is: > > /* Return true if this is a UNIX98 pty device, as defined in > linux/Documentation/devices.txt. */ > > this applies to comments below too > > > + if (is_pty (st) && strlen (procname) < buflen - 1) > > + { > > + memcpy (ttyname_buf, procname, strlen (procname)); > > + ttyname_buf[strlen (procname)] = '\0'; > > since you already verified buflen, why not use strcpy ? That actually had been my first inclination, not sure why I switched it. > also, GNU style says 8 spaces -> 1 tab > -mike There were a few other bugs as well. Replying with a new patch. thanks, -serge
diff --git a/sysdeps/unix/sysv/linux/ttyname.c b/sysdeps/unix/sysv/linux/ttyname.c index 7a001b4..54d0e6b 100644 --- a/sysdeps/unix/sysv/linux/ttyname.c +++ b/sysdeps/unix/sysv/linux/ttyname.c @@ -33,6 +33,21 @@ char *__ttyname; #endif +/* + * Return true if this is a UNIX98 pty device, as defined in + * linux/Documentation/devices.txt + */ +static int +is_pty (struct stat *sb) +{ +#ifdef _STATBUF_ST_RDEV + int m = major (sb.st_rdev); + return (136 <= m && m <= 143); +#else + return false; +#endif +} + static char *getttyname (const char *dev, dev_t mydev, ino64_t myino, int save, int *dostat) internal_function; @@ -170,12 +185,22 @@ ttyname (int fd) #ifdef _STATBUF_ST_RDEV && S_ISCHR (st1.st_mode) && st1.st_rdev == st.st_rdev + && st1.st_dev == st.st_dev #else && st1.st_ino == st.st_ino && st1.st_dev == st.st_dev #endif ) return ttyname_buf; + /* If the link doesn't exist, then it points to a dvice in another + * namespace. If it is a UNIX98 pty, then return the /proc/self + * fd, as it points to a name unreachable in our namespace */ + if (is_pty (st) && strlen (procname) < buflen - 1) + { + memcpy (ttyname_buf, procname, strlen (procname)); + ttyname_buf[strlen (procname)] = '\0'; + return ttyname_buf; + } } if (__xstat64 (_STAT_VER, "/dev/pts", &st1) == 0 && S_ISDIR (st1.st_mode))