summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Contreras <felipe.contreras@gmail.com>2010-06-14 02:53:25 +0300
committerFelipe Contreras <felipe.contreras@gmail.com>2010-06-14 03:57:54 +0300
commit4f98b29450ab80a07425d8da28e4d326cc505c40 (patch)
treefc7e34919be032f61dda44a43040798601db6fec
parentbff5b6450661f175c2cb09412355fb9f39c2c7f1 (diff)
Add pn_cmd
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
-rw-r--r--Makefile2
-rw-r--r--pn_cmd.c51
-rw-r--r--pn_cmd.h16
3 files changed, 68 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index f36cbde..524debc 100644
--- a/Makefile
+++ b/Makefile
@@ -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 */