diff options
Diffstat (limited to 'src/utils')
| -rw-r--r-- | src/utils/stringBuilder.c | 30 | ||||
| -rw-r--r-- | src/utils/stringBuilder.h | 14 |
2 files changed, 44 insertions, 0 deletions
diff --git a/src/utils/stringBuilder.c b/src/utils/stringBuilder.c new file mode 100644 index 0000000..805fb34 --- /dev/null +++ b/src/utils/stringBuilder.c @@ -0,0 +1,30 @@ +#include "stringBuilder.h" +#include <stdlib.h> +#include <string.h> + +void AppendStringBuilder(StringBuilder *sb, const char *str, char separator) { + size_t str_len = strlen(str); + if (sb->val == NULL) { + sb->val = malloc(str_len + 1); + if (sb->val == NULL) return; + memcpy(sb->val, str, str_len); + sb->len = str_len; + } else { + char *appended = realloc(sb->val, sb->len + str_len + 2); + if (appended == NULL) return; + sb->val = appended; + + sb->val[sb->len] = separator; + memcpy(sb->val + sb->len + 1, str, str_len); + sb->len = sb->len + str_len + 1; + } + sb->val[sb->len] = 0x0; +} + +void FreeStringBuilder(StringBuilder *sb) { + if (sb->val != NULL) { + free(sb->val); + sb->val = NULL; + } + sb->len = 0; +} diff --git a/src/utils/stringBuilder.h b/src/utils/stringBuilder.h new file mode 100644 index 0000000..a9730a2 --- /dev/null +++ b/src/utils/stringBuilder.h @@ -0,0 +1,14 @@ +#ifndef SB_H +#define SB_H + +#include <stddef.h> + +typedef struct { + char *val; + size_t len; +} StringBuilder; + +void AppendStringBuilder(StringBuilder *sb, const char *str, char separator); +void FreeStringBuilder(StringBuilder *sb); + +#endif // SB_H |
