diff options
author | Felipe Contreras <felipe.contreras@gmail.com> | 2010-06-14 02:53:25 +0300 |
---|---|---|
committer | Felipe Contreras <felipe.contreras@gmail.com> | 2010-06-14 03:57:54 +0300 |
commit | 4f98b29450ab80a07425d8da28e4d326cc505c40 (patch) | |
tree | fc7e34919be032f61dda44a43040798601db6fec | |
parent | bff5b6450661f175c2cb09412355fb9f39c2c7f1 (diff) |
Add pn_cmd
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | pn_cmd.c | 51 | ||||
-rw-r--r-- | pn_cmd.h | 16 |
3 files changed, 68 insertions, 1 deletions
@@ -18,7 +18,7 @@ QUIET_CLEAN = @echo ' CLEAN '$@; endif test: test.o pn_core.o pn_session.o pn_node.o \ - pn_trans.o pn_cmd_node.o pn_ns.o \ + pn_trans.o pn_cmd_node.o pn_ns.o pn_cmd.o \ pn_log.o pn_printf.o pn_buffer.o pn_parser.o test: override CFLAGS += $(GIO_CFLAGS) test: override LIBS += $(GIO_LIBS) diff --git a/pn_cmd.c b/pn_cmd.c new file mode 100644 index 0000000..ae0dc4a --- /dev/null +++ b/pn_cmd.c @@ -0,0 +1,51 @@ +#include "pn_cmd.h" + +#include <glib.h> + +#include <stdlib.h> /* for strtol */ +#include <string.h> /* for strchr */ +#include <stdbool.h> + +struct pn_cmd * +pn_cmd_new_from_string(const char *str, size_t len) +{ + struct pn_cmd *cmd; + char *param_start; + + cmd = g_malloc0(sizeof(*cmd)); + + cmd->base = g_strndup(str, len); + param_start = strchr(cmd->base, ' '); + + if (param_start) { + *param_start++ = '\0'; + if (param_start[0]) + cmd->paramv = g_strsplit(param_start, " ", 0); + } + + if (cmd->paramv && cmd->paramv[0]) { + const char *param; + int c; + + for (c = 0; cmd->paramv[c]; c++) + ; + cmd->paramc = c; + + param = cmd->paramv[0]; + + cmd->tr_id = strtol(param, NULL, 10);; + } + else + cmd->tr_id = 0; + + return cmd; +} + +void +pn_cmd_free(struct pn_cmd *cmd) +{ + g_free(cmd->base); + g_strfreev(cmd->paramv); + + g_free(cmd); +} diff --git a/pn_cmd.h b/pn_cmd.h new file mode 100644 index 0000000..469203d --- /dev/null +++ b/pn_cmd.h @@ -0,0 +1,16 @@ +#ifndef PN_CMD_H +#define PN_CMD_H + +#include <stddef.h> + +struct pn_cmd { + unsigned tr_id; + char *base; + unsigned paramc; + char **paramv; +}; + +struct pn_cmd *pn_cmd_new_from_string(const char *str, size_t len); +void pn_cmd_free(struct pn_cmd *cmd); + +#endif /* PN_CMD_H */ |