lkml.org 
[lkml]   [2014]   [Feb]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCHv2] tty: Set correct tty name in 'active' sysfs attribute
    Date
    The 'active' sysfs attribute should refer to the currently
    active tty devices the console is running on, not the currently
    active console.
    The console structure doesn't refer to any device in sysfs,
    only the tty the console is running on has.
    So we need to print out the tty names in 'active', not
    the console names.

    Cc: Lennart Poettering <lennart@poettering.net>
    Cc: Kay Sievers <kay@vrfy.org>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Jiri Slaby <jslaby@suse.cz>
    Signed-off-by: Werner Fink <werner@suse.de>
    Signed-off-by: Hannes Reinecke <hare@suse.de>
    ---
    drivers/tty/tty_io.c | 23 +++++++++++++++++------
    1 file changed, 17 insertions(+), 6 deletions(-)

    diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
    index c74a00a..99af614 100644
    --- a/drivers/tty/tty_io.c
    +++ b/drivers/tty/tty_io.c
    @@ -1271,12 +1271,13 @@ static void pty_line_name(struct tty_driver *driver, int index, char *p)
    *
    * Locking: None
    */
    -static void tty_line_name(struct tty_driver *driver, int index, char *p)
    +static ssize_t tty_line_name(struct tty_driver *driver, int index, char *p)
    {
    if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE)
    - strcpy(p, driver->name);
    + return sprintf(p, "%s", driver->name);
    else
    - sprintf(p, "%s%d", driver->name, index + driver->name_base);
    + return sprintf(p, "%s%d", driver->name,
    + index + driver->name_base);
    }

    /**
    @@ -3545,9 +3546,19 @@ static ssize_t show_cons_active(struct device *dev,
    if (i >= ARRAY_SIZE(cs))
    break;
    }
    - while (i--)
    - count += sprintf(buf + count, "%s%d%c",
    - cs[i]->name, cs[i]->index, i ? ' ':'\n');
    + while (i--) {
    + struct tty_driver *driver;
    + const char *name = cs[i]->name;
    + int index = cs[i]->index;
    +
    + driver = cs[i]->device(cs[i], &index);
    + if (driver) {
    + count += tty_line_name(driver, index, buf + count);
    + count += sprintf(buf + count, "%c", i ? ' ':'\n');
    + } else
    + count += sprintf(buf + count, "%s%d%c",
    + name, index, i ? ' ':'\n');
    + }
    console_unlock();

    return count;
    --
    1.7.12.4


    \
     
     \ /
      Last update: 2014-02-06 17:01    [W:2.446 / U:0.216 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site