summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2014-04-03 15:17:27 +0800
committerJeremy Kerr <jk@ozlabs.org>2014-04-03 15:17:27 +0800
commite6427db8266f5964d14679c53b55da8e3ee0233c (patch)
treef66e438ef529363b97663e28551e73c58c3336bd
parent5f206b3d7960b79a4c85067132caa7e7a29dfc59 (diff)
downloadtalos-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>
-rw-r--r--ui/ncurses/generic-main.c40
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");
OpenPOWER on IntegriCloud