diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2014-04-03 15:17:27 +0800 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2014-04-03 15:17:27 +0800 |
commit | e6427db8266f5964d14679c53b55da8e3ee0233c (patch) | |
tree | f66e438ef529363b97663e28551e73c58c3336bd /ui | |
parent | 5f206b3d7960b79a4c85067132caa7e7a29dfc59 (diff) | |
download | talos-petitboot-e6427db8266f5964d14679c53b55da8e3ee0233c.tar.gz talos-petitboot-e6427db8266f5964d14679c53b55da8e3ee0233c.zip |
ui/ncurses: Use tty name in default log filename
When we have multiple ncurses UIs running, we'd like to log to separate
files. Currenly, all UIs log to the same file, which makes it diffifult
to determine which UI is logging each message.
This change uses the output of ttyname() (sanitised appropriately) as a
component of the default log filename.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'ui')
-rw-r--r-- | ui/ncurses/generic-main.c | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/ui/ncurses/generic-main.c b/ui/ncurses/generic-main.c index 2cfb9c3..ad4c0cf 100644 --- a/ui/ncurses/generic-main.c +++ b/ui/ncurses/generic-main.c @@ -28,6 +28,7 @@ #include <signal.h> #include <stdlib.h> #include <string.h> +#include <limits.h> #include <sys/time.h> #include "log/log.h" @@ -82,9 +83,7 @@ static int opts_parse(struct opts *opts, int argc, char *argv[]) { NULL, 0, NULL, 0}, }; static const char short_options[] = "dhl:sV"; - static const struct opts default_values = { - .log_file = "/var/log/petitboot/petitboot-nc.log", - }; + static const struct opts default_values = { 0 }; *opts = default_values; @@ -117,6 +116,31 @@ static int opts_parse(struct opts *opts, int argc, char *argv[]) return 0; } +static char *default_log_filename(void) +{ + const char *base = "/var/log/petitboot/petitboot-nc"; + static char name[PATH_MAX]; + char *tty; + int i; + + tty = ttyname(STDIN_FILENO); + + /* strip /dev/ */ + if (tty && !strncmp(tty, "/dev/", 5)) + tty += 5; + + /* change slashes to hyphens */ + for (i = 0; tty && tty[i]; i++) + if (tty[i] == '/') + tty[i] = '-'; + + if (!tty || !*tty) + tty = "unknown"; + + snprintf(name, sizeof(name), "%s.%s.log", base, tty); + + return name; +} /** * struct pb_cui - Main cui program instance. * @mm: Main menu. @@ -235,6 +259,7 @@ static void sig_handler(int signum) int main(int argc, char *argv[]) { static struct sigaction sa; + const char *log_filename; int result; int cui_result; struct opts opts; @@ -257,9 +282,14 @@ int main(int argc, char *argv[]) return EXIT_SUCCESS; } + if (opts.log_file) + log_filename = opts.log_file; + else + log_filename = default_log_filename(); + log = stderr; - if (strcmp(opts.log_file, "-")) { - log = fopen(opts.log_file, "a"); + if (strcmp(log_filename, "-")) { + log = fopen(log_filename, "a"); if (!log) log = fopen("/dev/null", "a"); |