#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"
#include <stdbool.h>
#include <string.h>
+static cmd_options_t default_options = {
+ /* identifier_default_host = */ NULL,
+};
+
/*
* private helper functions
*/
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;
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. */
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]))
{
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))
{
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;
+ 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
{
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;
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 */
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;