]> mj.ucw.cz Git - libucw.git/blobdiff - ucw/shell/logoutput.c
Opt: Deleted extra newlines after failure messages
[libucw.git] / ucw / shell / logoutput.c
index aa0c2f47f6dfdca8ebf9273eb00cb4db7a30461a..7b9ed80199fabb7cd47276d95008dc389416e405 100644 (file)
 
 #undef LOCAL_DEBUG
 
-#include "ucw/lib.h"
-#include "ucw/log.h"
-#include "ucw/mainloop.h"
-#include "ucw/clists.h"
-#include "ucw/getopt.h"
-#include "ucw/conf.h"
-#include "ucw/process.h"
+#include <ucw/lib.h>
+#include <ucw/log.h>
+#include <ucw/mainloop.h>
+#include <ucw/clists.h>
+#include <ucw/getopt.h>
+#include <ucw/conf.h>
+#include <ucw/process.h>
 
 #include <stdio.h>
 #include <string.h>
@@ -27,6 +27,8 @@
 #include <errno.h>
 
 static uns max_line = 1024;
+static int launch_finish_messages = 1;
+static int nonzero_status_message = 1;
 
 static struct cf_section cfsec_logoutput = {
   CF_ITEMS {
@@ -197,26 +199,32 @@ const struct option my_long_opts[] = {
   { "logfile", 1, 0, 'f'},
   { "logname", 1, 0, 'n'},
   { "descriptor", 1, 0, 'l'},
+  { "nv", 0, 0, 'q'},
+  { "nonverbose", 0, 0, 'q'},
+  { "non-verbose", 0, 0, 'q'},
+  { "non_verbose", 0, 0, 'q'},
+  { "silent", 0, 0, 's'},
   { NULL, 0, 0, 0}
 };
 
 #undef CF_USAGE_TAB
-#define CF_USAGE_TAB "\t\t"
+#define CF_USAGE_TAB "\t   "
 static char usage[] =
   "Usage:\n"
-  "logoutput -h|--help\t\tThis help.\n"
-  "logoutput <options> -i|--input\tRead filedescriptors and log them.\n"
-  "\t\t\t\tdefault: stdin at level I.\n"
+  "logoutput -h|--help\t\t   This help.\n"
+  "logoutput <options> -i|--input\t   Read file descriptors and log them.\n"
+  "\t\t\t\t   default: stdin at level I.\n"
   "logoutput <opts> [--] <cmd> [arguments for cmd ...]\n"
-  "\t\t\t\tOpen filedescriptors for writing for\n"
-  "\t\t\t\tcommand <cmd> and log them.\n"
-  "\t\t\t\tdefault: stdout:I, stderr:W.\n"
+  "\t\t\t\t   Open file descriptors for writing for command <cmd> and log them.\n"
+  "\t\t\t\t   default: stdout:I, stderr:W.\n\n"
   "Options:\n"
   CF_USAGE
-  "-n, --logname <name>\t\t\tUse <name> as program name in logs.\n"
-  "-l, --descriptor <fdnum>:<level>\tOpen filedescriptor <fdnum> and log it\n"
-  "\t\t\t\t\tat level <level> (discards defaults).\n"
-  "-f, --logfile <logfile>\t\t\tLog to file <logfile>.\n";
+  "-n, --logname <name>\t\t   Use <name> as program name in logs.\n"
+  "-l, --descriptor <fdnum>:<level>   Open file descriptor <fdnum> and log it at level <level> (replaces defaults).\n"
+  "-f, --logfile <logfile>\t\t   Log to file <logfile>.\n"
+  "-q, --nv, --nonverbose\t\t   Suppress launching and successful finish messages.\n"
+  "-s, --silent\t\t\t   Suppress launching message and all finish messages.\n"
+  "\t\t\t\t   (i.e., no warning if it terminates with a nonzero exit code or by a signal)\n";
 
 int
 main(int argc, char **argv)
@@ -284,6 +292,13 @@ main(int argc, char **argv)
        }
        break;
 
+      case 's':
+       nonzero_status_message = 0;
+       /* fallthrough */
+      case 'q':
+       launch_finish_messages = 0;
+       break;
+
       default:
        optind--;
        goto opt_done;
@@ -409,7 +424,8 @@ opt_done:
     }
     buf2[-1] = 0;
 
-    msg(L_INFO, "Launching command: %s", buf);
+    if (launch_finish_messages)
+      msg(L_INFO, "Launching command: %s", buf);
   }
 
   /* Set logname. */
@@ -437,10 +453,12 @@ opt_done:
     }
 
     if (format_exit_status(buf, status)) {
-      msg(L_WARN, "Child %s", buf);
+      if (nonzero_status_message)
+       msg(L_WARN, "Child %s", buf);
       return WIFEXITED(status) ? WEXITSTATUS(status) : 127;
     } else {
-      msg(L_INFO, "Child terminated successfully.");
+      if (launch_finish_messages)
+       msg(L_INFO, "Child terminated successfully.");
       return 0;
     }
   }