command parser: Set command type to UNKNOWN upon failure.
[collectd.git] / src / utils_cmds.c
index f5494a4..f574c6a 100644 (file)
@@ -28,6 +28,8 @@
 
 #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 "daemon/common.h"
@@ -197,6 +199,7 @@ cmd_status_t cmd_parsev (size_t argc, char **argv,
                cmd_t *ret_cmd, cmd_error_handler_t *err)
 {
        char *command = NULL;
+       cmd_status_t status;
 
        if ((argc < 1) || (argv == NULL) || (ret_cmd == NULL))
        {
@@ -210,13 +213,25 @@ cmd_status_t cmd_parsev (size_t argc, char **argv,
        if (strcasecmp ("FLUSH", command) == 0)
        {
                ret_cmd->type = CMD_FLUSH;
-               return cmd_parse_flush (argc - 1, argv + 1,
+               status = cmd_parse_flush (argc - 1, argv + 1,
                                &ret_cmd->cmd.flush, err);
        }
+       else if (strcasecmp ("GETVAL", command) == 0)
+       {
+               ret_cmd->type = CMD_GETVAL;
+               status = cmd_parse_getval (argc - 1, argv + 1,
+                               &ret_cmd->cmd.getval, err);
+       }
+       else if (strcasecmp ("LISTVAL", command) == 0)
+       {
+               ret_cmd->type = CMD_LISTVAL;
+               status = cmd_parse_listval (argc - 1, argv + 1,
+                               &ret_cmd->cmd.listval, err);
+       }
        else if (strcasecmp ("PUTVAL", command) == 0)
        {
                ret_cmd->type = CMD_PUTVAL;
-               return cmd_parse_putval (argc - 1, argv + 1,
+               status = cmd_parse_putval (argc - 1, argv + 1,
                                &ret_cmd->cmd.putval, err);
        }
        else
@@ -227,7 +242,9 @@ 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,
@@ -258,6 +275,12 @@ 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;
                case CMD_PUTVAL:
                        cmd_destroy_putval (&cmd->cmd.putval);
                        break;