From e6427db8266f5964d14679c53b55da8e3ee0233c Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Thu, 3 Apr 2014 15:17:27 +0800 Subject: 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 --- ui/ncurses/generic-main.c | 40 +++++++++++++++++++++++++++++++++++----- 1 file 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 #include #include +#include #include #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"); -- cgit v1.2.1