diff options
author | default <nobody@localhost> | 2023-01-17 09:50:16 +0100 |
---|---|---|
committer | default <nobody@localhost> | 2023-01-17 09:50:16 +0100 |
commit | a38c7aeadcc69b3405d40b008a0b87f7c5d023dc (patch) | |
tree | afe36eed782e9731d2b7e95768c6937e4592c842 /xs.h | |
parent | e46559c022c6b28302ab7e1df4778ee46457cfa4 (diff) |
Updated year in copyright notices.
Diffstat (limited to 'xs.h')
-rw-r--r-- | xs.h | 45 |
1 files changed, 27 insertions, 18 deletions
@@ -1,4 +1,4 @@ -/* copyright (c) 2022 grunfink - MIT license */ +/* copyright (c) 2022 - 2023 grunfink / MIT license */ #ifndef _XS_H @@ -53,7 +53,9 @@ d_char *xs_insert_m(d_char *data, int offset, const char *mem, int size); #define xs_insert(data, offset, data2) xs_insert_m(data, offset, data2, xs_size(data2)) #define xs_append_m(data, mem, size) xs_insert_m(data, xs_size(data) - 1, mem, size) d_char *xs_str_new(const char *str); -#define xs_str_cat(str1, str2) xs_insert(str1, xs_size(str1) - 1, str2) +d_char *xs_str_wrap_i(const char *prefix, d_char *str, const char *suffix); +#define xs_str_prepend_i(str, prefix) xs_str_wrap_i(prefix, str, NULL) +#define xs_str_cat(str, suffix) xs_str_wrap_i(NULL, str, suffix) d_char *xs_replace_i(d_char *str, const char *sfrom, const char *sto); #define xs_replace(str, sfrom, sto) xs_replace_i(xs_dup(str), sfrom, sto) d_char *xs_fmt(const char *fmt, ...); @@ -64,7 +66,6 @@ d_char *xs_crop_i(d_char *str, int start, int end); d_char *xs_strip_chars_i(d_char *str, const char *chars); #define xs_strip_i(str) xs_strip_chars_i(str, " \r\n\t\v\f") d_char *xs_tolower_i(d_char *str); -d_char *xs_str_prepend_i(d_char *str, const char *prefix); d_char *xs_list_new(void); d_char *xs_list_append_m(d_char *list, const char *mem, int dsz); #define xs_list_append(list, data) xs_list_append_m(list, data, xs_size(data)) @@ -364,6 +365,19 @@ d_char *xs_str_new(const char *str) } +d_char *xs_str_wrap_i(const char *prefix, d_char *str, const char *suffix) +/* wraps str with prefix and suffix */ +{ + if (prefix) + str = xs_insert_m(str, 0, prefix, strlen(prefix)); + + if (suffix) + str = xs_insert_m(str, xs_size(str) - 1, suffix, xs_size(suffix)); + + return str; +} + + d_char *xs_replace_i(d_char *str, const char *sfrom, const char *sto) /* replaces inline all sfrom with sto */ { @@ -490,18 +504,6 @@ d_char *xs_tolower_i(d_char *str) } -d_char *xs_str_prepend_i(d_char *str, const char *prefix) -/* prepends prefix into string */ -{ - int sz = strlen(prefix); - - str = xs_expand(str, 0, sz); - memcpy(str, prefix, sz); - - return str; -} - - /** lists **/ d_char *xs_list_new(void) @@ -666,9 +668,16 @@ d_char *xs_list_set(d_char *list, int num, const char *data) d_char *xs_list_pop(d_char *list, char **data) /* pops the last element from the list */ { - if ((*data = xs_list_get(list, -1)) != NULL) { - *data = xs_dup(*data); - list = xs_list_del(list, -1); + char *p = list, *v = NULL; + + /* iterate to the end */ + while (xs_list_iter(&p, &v)); + + if (v != NULL) { + *data = xs_dup(v); + + /* collapse from the address of the element */ + list = xs_collapse(list, v - 1 - list, xs_size(v - 1)); } return list; |