openrc/src/rc/_usage.c

98 lines
2.1 KiB
C
Raw Normal View History

2008-01-14 05:05:22 +00:00
/*
* 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/master/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/master/LICENSE
* This file may not be copied, modified, propagated, or distributed
* except according to the terms contained in the LICENSE file.
2007-04-17 12:44:32 +00:00
*/
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include "rc-misc.h"
#include "_usage.h"
#include "version.h"
2008-01-22 11:07:39 +00:00
#if lint
2009-04-23 21:31:22 +00:00
# define _noreturn
2008-01-22 11:07:39 +00:00
#endif
2008-02-22 11:44:10 +00:00
#if __GNUC__ > 2 || defined(__INTEL_COMPILER)
2009-04-23 21:31:22 +00:00
# define _noreturn __attribute__ ((__noreturn__))
2008-02-22 11:44:10 +00:00
#else
2009-04-23 21:31:22 +00:00
# define _noreturn
2008-01-22 11:07:39 +00:00
#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);
systype = detect_container();
if (!systype)
systype = detect_vm();
if (systype)
printf(" [%s]", systype);
printf(") %s", VERSION);
#ifdef BRANDING
printf(" (%s)", BRANDING);
#endif
printf("\n");
exit(EXIT_SUCCESS);
}
_noreturn void usage(int exit_status)
2007-04-17 12:44:32 +00:00
{
const char * const has_arg[] = { "", "<arg>", "[arg]" };
2007-04-17 12:44:32 +00:00
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);
2007-04-17 12:44:32 +00:00
}