diff options
author | Joursoir <chat@joursoir.net> | 2021-04-26 19:14:40 +0000 |
---|---|---|
committer | Joursoir <chat@joursoir.net> | 2021-04-26 19:14:40 +0000 |
commit | 60ac7dc79aeb8cb09a52be2e2510e158644fc344 (patch) | |
tree | 758e89fec222d168e1f9f5e41dc4b5fba26a526a /xstring.c | |
download | ctimeline-60ac7dc79aeb8cb09a52be2e2510e158644fc344.tar.gz ctimeline-60ac7dc79aeb8cb09a52be2e2510e158644fc344.tar.bz2 ctimeline-60ac7dc79aeb8cb09a52be2e2510e158644fc344.zip |
init project
Diffstat (limited to 'xstring.c')
-rw-r--r-- | xstring.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/xstring.c b/xstring.c new file mode 100644 index 0000000..98d91f9 --- /dev/null +++ b/xstring.c @@ -0,0 +1,59 @@ +#include <stdlib.h>
+#include <string.h>
+
+#include "xstring.h"
+
+string *string_alloc(const char *text)
+{
+ string *str = malloc(sizeof(string));
+ if(text) {
+ int length = strlen(text);
+ str->s = malloc(sizeof(char) * (length + 1));
+ strcpy(str->s, text);
+ str->capacity = length;
+ str->len = length;
+ }
+ else {
+ str->s = malloc(sizeof(char) * (INIT_LEN_STRING + 1));
+ str->len = 0;
+ str->capacity = INIT_LEN_STRING;
+ str->s[0] = '\0';
+ }
+ return str;
+}
+
+void string_release(string *str)
+{
+ if(str->s) {
+ free(str->s);
+ str->s = NULL;
+ }
+ free(str);
+}
+
+void string_reset(string *str)
+{
+ if(str->s) {
+ str->s[0] = '\0';
+ str->len = 0;
+ }
+}
+
+void string_addch(string *str, int ch)
+{
+ if(str->capacity <= (str->len + 1)) {
+ int i;
+ int updated_cap = str->capacity + INIT_LEN_STRING;
+ char *tmp_s = str->s;
+ str->s = malloc(sizeof(char) * (updated_cap + 1));
+ for(i = 0; i < updated_cap; i++)
+ str->s[i] = (i >= str->capacity) ? '\0' : tmp_s[i];
+
+ str->capacity = updated_cap;
+ free(tmp_s);
+ }
+
+ str->s[str->len] = ch;
+ str->len++;
+ str->s[str->len] = '\0';
+}
|