summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--degesch.c76
1 files changed, 44 insertions, 32 deletions
diff --git a/degesch.c b/degesch.c
index b0a3e04..1d66a9d 100644
--- a/degesch.c
+++ b/degesch.c
@@ -4121,6 +4121,41 @@ g_command_handlers[] =
};
static bool
+try_handle_command_help_option (struct app_context *ctx, const char *name)
+{
+ struct config_item_ *item =
+ config_item_get (ctx->config.root, name, NULL);
+ if (!item)
+ return false;
+
+ struct config_schema *schema = item->schema;
+ if (!schema)
+ {
+ buffer_send_error (ctx, ctx->global_buffer,
+ "%s: %s", "This option has no schema", name);
+ return true;
+ }
+
+ buffer_send_status (ctx, ctx->global_buffer, "%s", "");
+ buffer_send_status (ctx, ctx->global_buffer,
+ "Option \"%s\":", name);
+ buffer_send_status (ctx, ctx->global_buffer,
+ " Description: %s", schema->comment);
+ buffer_send_status (ctx, ctx->global_buffer,
+ " Type: %s", config_item_type_name (schema->type));
+ buffer_send_status (ctx, ctx->global_buffer,
+ " Default: %s", schema->default_ ? schema->default_ : "null");
+
+ struct str tmp;
+ str_init (&tmp);
+ config_item_write (item, false, &tmp);
+ buffer_send_status (ctx, ctx->global_buffer,
+ " Current value: %s", tmp.str);
+ str_free (&tmp);
+ return true;
+}
+
+static bool
handle_command_help (struct app_context *ctx, char *arguments)
{
if (!*arguments)
@@ -4140,43 +4175,20 @@ handle_command_help (struct app_context *ctx, char *arguments)
for (size_t i = 0; i < N_ELEMENTS (g_command_handlers); i++)
{
struct command_handler *handler = &g_command_handlers[i];
- if (!strcasecmp_ascii (command, handler->name))
- {
- buffer_send_status (ctx, ctx->global_buffer, "%s", "");
- buffer_send_status (ctx, ctx->global_buffer, "%s: %s",
- handler->name, handler->description);
- buffer_send_status (ctx, ctx->global_buffer, " Arguments: %s",
- handler->usage);
- return true;
- }
- }
+ if (strcasecmp_ascii (command, handler->name))
+ continue;
- struct config_item_ *item =
- config_item_get (ctx->config.root, command, NULL);
- if (item)
- {
- struct config_schema *schema = item->schema;
buffer_send_status (ctx, ctx->global_buffer, "%s", "");
- buffer_send_status (ctx, ctx->global_buffer,
- "Option \"%s\":", command);
- buffer_send_status (ctx, ctx->global_buffer,
- " Description: %s", schema->comment);
- buffer_send_status (ctx, ctx->global_buffer,
- " Type: %s", config_item_type_name (schema->type));
- buffer_send_status (ctx, ctx->global_buffer,
- " Default: %s", schema->default_ ? schema->default_ : "null");
-
- struct str tmp;
- str_init (&tmp);
- config_item_write (item, false, &tmp);
- buffer_send_status (ctx, ctx->global_buffer,
- " Current value: %s", tmp.str);
- str_free (&tmp);
+ buffer_send_status (ctx, ctx->global_buffer, "%s: %s",
+ handler->name, handler->description);
+ buffer_send_status (ctx, ctx->global_buffer, " Arguments: %s",
+ handler->usage);
return true;
}
- buffer_send_error (ctx, ctx->global_buffer,
- "%s: %s", "No such command or option", command);
+ if (!try_handle_command_help_option (ctx, command))
+ buffer_send_error (ctx, ctx->global_buffer,
+ "%s: %s", "No such command or option", command);
return true;
}