Declare loop variable in the loop expression.
[collectd.git] / src / utils_cmds.c
index 7648435..1f53ad1 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "utils_cmds.h"
 #include "utils_cmd_flush.h"
+#include "utils_cmd_getval.h"
 #include "utils_cmd_listval.h"
 #include "utils_cmd_putval.h"
 #include "utils_parse_option.h"
 #include <stdbool.h>
 #include <string.h>
 
+static cmd_options_t default_options = {
+       /* identifier_default_host = */ NULL,
+};
+
 /*
  * private helper functions
  */
@@ -44,7 +49,7 @@ static cmd_status_t cmd_split (char *buffer,
                size_t *ret_len, char ***ret_fields,
                cmd_error_handler_t *err)
 {
-       char *string, *field;
+       char *field;
        bool in_field, in_quotes;
 
        size_t estimate, len;
@@ -52,7 +57,7 @@ static cmd_status_t cmd_split (char *buffer,
 
        estimate = 0;
        in_field = false;
-       for (string = buffer; *string != '\0'; ++string)
+       for (char *string = buffer; *string != '\0'; ++string)
        {
                /* Make a quick worst-case estimate of the number of fields by
                 * counting spaces and ignoring quotation marks. */
@@ -97,7 +102,7 @@ static cmd_status_t cmd_split (char *buffer,
        field = NULL;
        in_field = false;
        in_quotes = false;
-       for (string = buffer; *string != '\0'; string++)
+       for (char *string = buffer; *string != '\0'; string++)
        {
                if (isspace ((int)string[0]))
                {
@@ -194,10 +199,11 @@ void cmd_error (cmd_status_t status, cmd_error_handler_t *err,
        va_end (ap);
 } /* void cmd_error */
 
-cmd_status_t cmd_parsev (size_t argc, char **argv,
-               cmd_t *ret_cmd, cmd_error_handler_t *err)
+cmd_status_t cmd_parsev (size_t argc, char **argv, cmd_t *ret_cmd,
+               const cmd_options_t *opts, cmd_error_handler_t *err)
 {
        char *command = NULL;
+       cmd_status_t status;
 
        if ((argc < 1) || (argv == NULL) || (ret_cmd == NULL))
        {
@@ -206,25 +212,34 @@ cmd_status_t cmd_parsev (size_t argc, char **argv,
                return CMD_ERROR;
        }
 
+       if (opts == NULL)
+               opts = &default_options;
+
        memset (ret_cmd, 0, sizeof (*ret_cmd));
        command = argv[0];
        if (strcasecmp ("FLUSH", command) == 0)
        {
                ret_cmd->type = CMD_FLUSH;
-               return cmd_parse_flush (argc - 1, argv + 1,
-                               &ret_cmd->cmd.flush, err);
+               status = cmd_parse_flush (argc - 1, argv + 1,
+                               &ret_cmd->cmd.flush, opts, err);
+       }
+       else if (strcasecmp ("GETVAL", command) == 0)
+       {
+               ret_cmd->type = CMD_GETVAL;
+               status = cmd_parse_getval (argc - 1, argv + 1,
+                               &ret_cmd->cmd.getval, opts, err);
        }
        else if (strcasecmp ("LISTVAL", command) == 0)
        {
                ret_cmd->type = CMD_LISTVAL;
-               return cmd_parse_listval (argc - 1, argv + 1,
-                               &ret_cmd->cmd.listval, err);
+               status = cmd_parse_listval (argc - 1, argv + 1,
+                               &ret_cmd->cmd.listval, opts, err);
        }
        else if (strcasecmp ("PUTVAL", command) == 0)
        {
                ret_cmd->type = CMD_PUTVAL;
-               return cmd_parse_putval (argc - 1, argv + 1,
-                               &ret_cmd->cmd.putval, err);
+               status = cmd_parse_putval (argc - 1, argv + 1,
+                               &ret_cmd->cmd.putval, opts, err);
        }
        else
        {
@@ -234,11 +249,13 @@ cmd_status_t cmd_parsev (size_t argc, char **argv,
                return (CMD_UNKNOWN_COMMAND);
        }
 
-       return (CMD_OK);
+       if (status != CMD_OK)
+               ret_cmd->type = CMD_UNKNOWN;
+       return (status);
 } /* cmd_status_t cmd_parsev */
 
-cmd_status_t cmd_parse (char *buffer,
-               cmd_t *ret_cmd, cmd_error_handler_t *err)
+cmd_status_t cmd_parse (char *buffer, cmd_t *ret_cmd,
+               const cmd_options_t *opts, cmd_error_handler_t *err)
 {
        char **fields = NULL;
        size_t fields_num = 0;
@@ -247,7 +264,7 @@ cmd_status_t cmd_parse (char *buffer,
        if ((status = cmd_split (buffer, &fields_num, &fields, err)) != CMD_OK)
                return status;
 
-       status = cmd_parsev (fields_num, fields, ret_cmd, err);
+       status = cmd_parsev (fields_num, fields, ret_cmd, opts, err);
        free (fields);
        return (status);
 } /* cmd_status_t cmd_parse */
@@ -265,6 +282,9 @@ void cmd_destroy (cmd_t *cmd)
                case CMD_FLUSH:
                        cmd_destroy_flush (&cmd->cmd.flush);
                        break;
+               case CMD_GETVAL:
+                       cmd_destroy_getval (&cmd->cmd.getval);
+                       break;
                case CMD_LISTVAL:
                        cmd_destroy_listval (&cmd->cmd.listval);
                        break;