chiark / gitweb /
svc/tripe-ifup.in: Trim prefix length from IPv6 address used as gateway.
[tripe] / client / tripectl.c
index e5f086fdc5cee05d7ed9aba49731ea7f73510258..f14c137e44283d707f8fb420e9f5d66f299ed2a2 100644 (file)
@@ -94,6 +94,7 @@ static const char *bgtag = 0;
 #define f_warn 128u
 #define f_uclose 256u
 #define f_losing 512u
+#define f_nostamp 1024u
 
 /*----- Main code ---------------------------------------------------------*/
 
@@ -110,8 +111,9 @@ static void writelog(const char *cat, const char *msg)
   char buf[256];
   time_t t = time(0);
   struct tm *tm = localtime(&t);
-  strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", tm);
-  fprintf(logfp, "%s %s: %s\n", buf, cat, msg);
+  if (f & f_nostamp) buf[0] = 0;
+  else strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S ", tm);
+  fprintf(logfp, "%s%s: %s\n", buf, cat, msg);
 }
 
 static void checkbg(char **p)
@@ -163,9 +165,9 @@ static void cline(char *p, size_t len, void *b)
   if (!q)
     return;
   if (strcmp(q, "WARN") == 0)
-    dolog(LOG_WARNING, p);
+    dolog(LOG_WARNING, "%s", p);
   else if (strcmp(q, "TRACE") == 0)
-    dolog(LOG_DEBUG, p);
+    dolog(LOG_DEBUG, "%s", p);
   else if (!(f & f_command))
     dolog(LOG_ERR, "unexpected output `%s %s'", q, p);
   else if (strcmp(q, "FAIL") == 0) {
@@ -274,7 +276,11 @@ static void logfile(const char *name)
 {
   FILE *fp;
 
-  if ((fp = fopen(name, "a")) != 0) {
+  if (strcmp(name, "-") == 0)
+    logfp = stdout;
+  else if (strcmp(name, "!") == 0)
+    logfp = stderr;
+  else if ((fp = fopen(name, "a")) != 0) {
     if (logfp)
       fclose(logfp);
     logfp =  fp;
@@ -285,7 +291,7 @@ static void logfile(const char *name)
     if (logfp)
       writelog("error", d.buf);
     else if (logname)
-      die(EXIT_FAILURE, d.buf);
+      die(EXIT_FAILURE, "%s", d.buf);
     if (f & f_syslog)
       syslog(LOG_ERR, "%s", d.buf);
     dstr_destroy(&d);
@@ -354,6 +360,7 @@ Options in full:\n\
 \n\
 -l, --syslog           Log messages to system log.\n\
 -f, --logfile=FILE     Log messages to FILE.\n\
+-t, --no-timestamp     When logging to a file, don't emit timestamps.\n\
 -w, --warnings         Show warnings when running commands.\n\
 ", fp);
 }
@@ -406,12 +413,13 @@ int main(int argc, char *argv[])
       { "spawn-args",  OPTF_ARGREQ,    0,      'S' },
       { "syslog",      0,              0,      'l' },
       { "logfile",     OPTF_ARGREQ,    0,      'f' },
+      { "no-timestamp",        0,              0,      't' },
       { "warnings",    0,              0,      'w' },
       { "pidfile",     OPTF_ARGREQ,    0,      'P' },
       { 0,             0,              0,      0 }
     };
 
-    i = mdwopt(argc, argv, "+hvuDU:G:d:a:sp:S:lwf:nP:", opts, 0, 0, 0);
+    i = mdwopt(argc, argv, "+hvuDU:G:d:a:sp:S:lwf:nP:t", opts, 0, 0, 0);
     if (i < 0)
       break;
     switch (i) {
@@ -461,6 +469,9 @@ int main(int argc, char *argv[])
        logname = optarg;
        f |= f_noinput;
        break;
+      case 't':
+       f |= f_nostamp;
+       break;
       case 'P':
        pidfile = optarg;
        break;