aboutsummaryrefslogtreecommitdiff
path: root/src/shared/_usage.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/_usage.c')
-rw-r--r--src/shared/_usage.c95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/shared/_usage.c b/src/shared/_usage.c
new file mode 100644
index 00000000..bba03b92
--- /dev/null
+++ b/src/shared/_usage.c
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2007-2015 The OpenRC Authors.
+ * See the Authors file at the top-level directory of this distribution and
+ * https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS
+ *
+ * This file is part of OpenRC. It is subject to the license terms in
+ * the LICENSE file found in the top-level directory of this
+ * distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE
+ * This file may not be copied, modified, propagated, or distributed
+ * except according to the terms contained in the LICENSE file.
+ */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "rc.h"
+#include "misc.h"
+#include "_usage.h"
+#include "version.h"
+
+#if lint
+# define _noreturn
+#endif
+#if __GNUC__ > 2 || defined(__INTEL_COMPILER)
+# define _noreturn __attribute__ ((__noreturn__))
+#else
+# define _noreturn
+#endif
+
+void set_quiet_options(void)
+{
+ static int qcount = 0;
+
+ qcount ++;
+ switch (qcount) {
+ case 1:
+ setenv ("EINFO_QUIET", "YES", 1);
+ break;
+ case 2:
+ setenv ("EERROR_QUIET", "YES", 1);
+ break;
+ }
+}
+
+_noreturn void show_version(void)
+{
+ const char *systype = NULL;
+
+ printf("%s (OpenRC", applet);
+ if ((systype = rc_sys()))
+ printf(" [%s]", systype);
+ printf(") %s", VERSION);
+#ifdef BRANDING
+ printf(" (%s)", BRANDING);
+#endif
+ printf("\n");
+ exit(EXIT_SUCCESS);
+}
+
+_noreturn void usage(int exit_status)
+{
+ const char * const has_arg[] = { "", "<arg>", "[arg]" };
+ int i;
+ int len;
+ char *lo;
+ char *p;
+ char *token;
+ char val[4] = "-?,";
+
+ if (usagestring)
+ printf("%s", usagestring);
+ else
+ printf("Usage: %s [options] ", applet);
+
+ if (extraopts)
+ printf("%s", extraopts);
+
+ printf("\n\nOptions: [ %s ]\n", getoptstring);
+ for (i = 0; longopts[i].name; ++i) {
+ val[1] = longopts[i].val;
+ len = printf(" %3s --%s %s", isprint(longopts[i].val) ? val : "",
+ longopts[i].name, has_arg[longopts[i].has_arg]);
+
+ lo = p = xstrdup(longopts_help[i]);
+ while ((token = strsep(&p, "\n"))) {
+ len = 36 - len;
+ if (len > 0)
+ printf("%*s", len, "");
+ puts(token);
+ len = 0;
+ }
+ free(lo);
+ }
+ exit(exit_status);
+}