14 #ifndef PCMK__CONFIG_H 15 # define PCMK__CONFIG_H 27 bump_verbosity(
const gchar *option_name,
const gchar *optarg, gpointer
data, GError **error) {
52 free_common_args(gpointer
data) {
68 GOptionGroup **output_group,
const char *param_string) {
70 GOptionContext *context;
71 GOptionGroup *main_group;
73 GOptionEntry main_entries[3] = {
74 {
"version",
'$', 0, G_OPTION_ARG_NONE, &(common_args->
version),
75 "Display software version and exit",
77 {
"verbose",
'V', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, bump_verbosity,
78 "Increase debug output (may be specified multiple times)",
84 main_group = g_option_group_new(NULL,
"Application Options:", NULL, common_args, free_common_args);
85 g_option_group_add_entries(main_group, main_entries);
87 context = g_option_context_new(param_string);
88 g_option_context_set_summary(context, common_args->
summary);
89 g_option_context_set_description(context, desc);
90 g_option_context_set_main_group(context, main_group);
93 GOptionEntry output_entries[3] = {
94 {
"output-as", 0, 0, G_OPTION_ARG_STRING, &(common_args->
output_ty),
97 {
"output-to", 0, 0, G_OPTION_ARG_STRING, &(common_args->
output_dest),
98 "Specify file name for output (or \"-\" for stdout)",
"DEST" },
103 if (*output_group == NULL) {
104 *output_group = g_option_group_new(
"output",
"Output Options:",
"Show output help", NULL, NULL);
109 g_option_group_add_entries(*output_group, output_entries);
110 g_option_context_add_group(context, *output_group);
122 if (context == NULL) {
126 g_option_context_free(context);
132 GOptionGroup *main_group = g_option_context_get_main_group(context);
134 g_option_group_add_entries(main_group, entries);
139 const char *header,
const char *desc,
140 GOptionEntry entries[])
142 GOptionGroup *group = NULL;
144 group = g_option_group_new(
name, header, desc, NULL, NULL);
145 g_option_group_add_entries(group, entries);
146 g_option_context_add_group(context, group);
153 gchar **retval = NULL;
154 GPtrArray *arr = NULL;
155 bool saw_dash_dash =
false;
161 if (g_get_prgname() == NULL && argv && *argv) {
162 gchar *basename = g_path_get_basename(*argv);
164 g_set_prgname(basename);
168 arr = g_ptr_array_new();
170 for (
int i = 0; argv[i] != NULL; i++) {
176 if (saw_dash_dash ==
false && strcmp(argv[i],
"--") == 0) {
177 saw_dash_dash =
true;
180 if (saw_dash_dash ==
true) {
181 g_ptr_array_add(arr, g_strdup(argv[i]));
189 g_ptr_array_add(arr, g_strdup(argv[i]));
196 if (g_str_has_prefix(argv[i],
"-") && !g_str_has_prefix(argv[i],
"--")) {
198 char *ch = argv[i]+1;
200 while (*ch !=
'\0') {
206 if (strchr(special, *ch) != NULL) {
210 if (*(ch+1) !=
'\0') {
211 g_ptr_array_add(arr, g_strdup_printf(
"-%c", *ch));
212 g_ptr_array_add(arr, g_strdup(ch+1));
220 g_ptr_array_add(arr, g_strdup_printf(
"-%c", *ch));
226 g_ptr_array_add(arr, g_strdup_printf(
"-%c", *ch));
236 g_ptr_array_add(arr, g_strdup(argv[i]));
244 retval = calloc(arr->len+1,
sizeof(
char *));
245 for (
int i = 0; i < arr->len; i++) {
246 retval[i] = (gchar *) g_ptr_array_index(arr, i);
249 g_ptr_array_free(arr, FALSE);
259 gchar **extra_args = NULL;
261 gboolean retval = TRUE;
263 va_start(ap, format);
264 len = vasprintf(&buf, format, ap);
268 if (!g_shell_parse_argv(buf, NULL, &extra_args, error)) {
269 g_strfreev(extra_args);
274 retval = g_option_context_parse_strv(context, &extra_args, error);
276 g_strfreev(extra_args);
crm_exit_t crm_errno2exit(int rc)
gchar ** pcmk__cmdline_preproc(char **argv, const char *special)
_Noreturn crm_exit_t crm_exit(crm_exit_t rc)
void pcmk__add_arg_group(GOptionContext *context, const char *name, const char *header, const char *desc, GOptionEntry entries[])
GOptionContext * pcmk__build_arg_context(pcmk__common_args_t *common_args, const char *fmts, GOptionGroup **output_group, const char *param_string)
pcmk__common_args_t * pcmk__new_common_args(const char *summary)
void pcmk__free_arg_context(GOptionContext *context)
gboolean pcmk__force_args(GOptionContext *context, GError **error, const char *format,...)
#define PACKAGE_BUGREPORT
void pcmk__add_main_args(GOptionContext *context, GOptionEntry entries[])
char * crm_strdup_printf(char const *format,...) __attribute__((__format__(__printf__
gboolean summary(GListPtr resources)