X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Futmp-wtmp.c;h=b03a3e70af9dbf8180a78763a420a6de5dcd6d92;hp=41589303ba63cc651aba5f775f7e0470c6bf50f7;hb=b9b2b042c5564dfff730eeab43db9ac4bbe4c650;hpb=169c1bda807d183a362b47efe0b5b56e9320e430 diff --git a/src/utmp-wtmp.c b/src/utmp-wtmp.c index 41589303b..b03a3e70a 100644 --- a/src/utmp-wtmp.c +++ b/src/utmp-wtmp.c @@ -358,7 +358,7 @@ finish: return r; } -int utmp_wall(const char *message) { +int utmp_wall(const char *message, bool (*match_tty)(const char *tty)) { struct utmpx *u; char date[FORMAT_TIMESTAMP_MAX]; char *text = NULL, *hn = NULL, *un = NULL, *tty = NULL; @@ -370,7 +370,7 @@ int utmp_wall(const char *message) { goto finish; } - getttyname_malloc(&tty); + getttyname_harder(STDIN_FILENO, &tty); if (asprintf(&text, "\a\r\n" @@ -407,8 +407,9 @@ int utmp_wall(const char *message) { path = buf; } - if ((q = write_to_terminal(path, text)) < 0) - r = q; + if (!match_tty || match_tty(path)) + if ((q = write_to_terminal(path, text)) < 0) + r = q; free(buf); }