summaryrefslogtreecommitdiff
path: root/src/ecommon/utils/strutil.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ecommon/utils/strutil.c')
-rw-r--r--src/ecommon/utils/strutil.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/ecommon/utils/strutil.c b/src/ecommon/utils/strutil.c
new file mode 100644
index 0000000..d782b0a
--- /dev/null
+++ b/src/ecommon/utils/strutil.c
@@ -0,0 +1,53 @@
+// Copyright (c) Copyright (c) Hercules Dev Team, licensed under GNU GPL.
+// Copyright (c) 2014 - 2015 Evol developers
+
+#include "common/hercules.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "common/memmgr.h"
+#include "common/strlib.h"
+
+#include "ecommon/utils/strutil.h"
+
+#include "ecommon/struct/strutildata.h"
+
+struct strutil_data *strutil_split(const char *str,
+ const char separator,
+ const int len)
+{
+ if (!str || len < 1)
+ return NULL;
+ struct strutil_data *data = aCalloc(1, sizeof(struct strutil_data));
+ if (!data)
+ return NULL;
+ data->str = aStrdup(str);
+ VECTOR_INIT(data->parts);
+ VECTOR_ENSURE(data->parts, len + 1, 1);
+
+ data->len = sv->split(data->str,
+ strlen(data->str),
+ 0,
+ separator,
+ VECTOR_DATA(data->parts),
+ len + 1,
+ 0);
+ if (data->len < 1)
+ {
+ strutil_free(data);
+ return NULL;
+ }
+
+ return data;
+}
+
+void strutil_free(struct strutil_data *data)
+{
+ if (!data)
+ return NULL;
+ VECTOR_CLEAR(data->parts);
+ aFree(data->str);
+ aFree(data);
+}