#include <stdarg.h>
typedef enum {
- CMD_UNKNOWN = 0,
- CMD_PUTVAL = 1,
+ CMD_UNKNOWN = 0,
+ CMD_FLUSH = 1,
+ CMD_GETVAL = 2,
+ CMD_LISTVAL = 3,
+ CMD_PUTVAL = 4,
} cmd_type_t;
-#define CMD_TO_STRING(type) \
- ((type) == CMD_PUTVAL) ? "PUTVAL" \
- : "UNKNOWN"
+#define CMD_TO_STRING(type) \
+ ((type) == CMD_FLUSH) ? "FLUSH" : ((type) == CMD_GETVAL) \
+ ? "GETVAL" \
+ : ((type) == CMD_LISTVAL) \
+ ? "LISTVAL" \
+ : ((type) == CMD_PUTVAL) \
+ ? "PUTVAL" \
+ : "UNKNOWN"
typedef struct {
- /* The raw identifier as provided by the user. */
- char *identifier;
+ double timeout;
- /* An array of the fully parsed identifier and all value lists, and their
- * options as provided by the user. */
- value_list_t *vl;
- size_t vl_num;
+ char **plugins;
+ size_t plugins_num;
+ identifier_t *identifiers;
+ size_t identifiers_num;
+} cmd_flush_t;
+
+typedef struct {
+ char *raw_identifier;
+ identifier_t identifier;
+} cmd_getval_t;
+
+typedef struct {
+} cmd_listval_t;
+
+typedef struct {
+ /* The raw identifier as provided by the user. */
+ char *raw_identifier;
+
+ /* An array of the fully parsed identifier and all value lists, and their
+ * options as provided by the user. */
+ value_list_t *vl;
+ size_t vl_num;
} cmd_putval_t;
/*
* The representation of a fully parsed command.
*/
typedef struct {
- cmd_type_t type;
- union {
- cmd_putval_t putval;
- } cmd;
+ cmd_type_t type;
+ union {
+ cmd_flush_t flush;
+ cmd_getval_t getval;
+ cmd_listval_t listval;
+ cmd_putval_t putval;
+ } cmd;
} cmd_t;
/*
* NAME
+ * cmd_options_t
+ *
+ * DESCRIPTIONS
+ * Optional settings for tuning the parser behavior.
+ */
+typedef struct {
+ /* identifier_default_host: If non-NULL, the hostname is optional and will
+ * default to the specified value. */
+ char *identifier_default_host;
+} cmd_options_t;
+
+/*
+ * NAME
* cmd_status_t
*
* DESCRIPTION
* Status codes describing the parse result.
*/
typedef enum {
- CMD_OK = 0,
- CMD_ERROR = -1,
- CMD_PARSE_ERROR = -2,
- CMD_UNKNOWN_COMMAND = -3,
+ CMD_OK = 0,
+ CMD_ERROR = -1,
+ CMD_PARSE_ERROR = -2,
+ CMD_UNKNOWN_COMMAND = -3,
+
+ /* Not necessarily fatal errors. */
+ CMD_NO_OPTION = 1,
} cmd_status_t;
/*
* as the first argument.
*/
typedef struct {
- void (*cb) (void *, cmd_status_t, const char *, va_list);
- void *ud;
+ void (*cb)(void *, cmd_status_t, const char *, va_list);
+ void *ud;
} cmd_error_handler_t;
/*
* DESCRIPTION
* Reports an error via the specified error handler (if set).
*/
-void cmd_error (cmd_status_t status, cmd_error_handler_t *err,
- const char *format, ...);
+void cmd_error(cmd_status_t status, cmd_error_handler_t *err,
+ const char *format, ...);
/*
* NAME
* PARAMETERS
* `buffer' The command string to be parsed.
* `ret_cmd' The parse result will be stored at this location.
+ * `opts' Parser options. If NULL, defaults will be used.
* `err' An optional error handler to invoke on error.
*
* RETURN VALUE
* CMD_OK on success or the respective error code otherwise.
*/
-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);
+
+cmd_status_t cmd_parsev(size_t argc, char **argv, cmd_t *ret_cmd,
+ const cmd_options_t *opts, cmd_error_handler_t *err);
+
+void cmd_destroy(cmd_t *cmd);
-void cmd_destroy (cmd_t *cmd);
+/*
+ * NAME
+ * cmd_parse_option
+ *
+ * DESCRIPTION
+ * Parses a command option which must be of the form:
+ * name=value with \ and spaces
+ *
+ * PARAMETERS
+ * `field' The parsed input field with any quotes removed and special
+ * characters unescaped.
+ * `ret_key' The parsed key will be stored at this location.
+ * `ret_value' The parsed value will be stored at this location.
+ *
+ * RETURN VALUE
+ * CMD_OK on success or an error code otherwise.
+ * CMD_NO_OPTION if `field' does not represent an option at all (missing
+ * equal sign).
+ */
+cmd_status_t cmd_parse_option(char *field, char **ret_key, char **ret_value,
+ cmd_error_handler_t *err);
/*
* NAME
* `ap' Variable argument list providing the arguments for the format
* string.
*/
-void cmd_error_fh (void *ud, cmd_status_t status,
- const char *format, va_list ap);
+void cmd_error_fh(void *ud, cmd_status_t status, const char *format,
+ va_list ap);
#endif /* UTILS_CMDS_H */