summaryrefslogtreecommitdiff
path: root/xs.h
diff options
context:
space:
mode:
authordefault <nobody@localhost>2023-01-17 09:50:16 +0100
committerdefault <nobody@localhost>2023-01-17 09:50:16 +0100
commita38c7aeadcc69b3405d40b008a0b87f7c5d023dc (patch)
treeafe36eed782e9731d2b7e95768c6937e4592c842 /xs.h
parente46559c022c6b28302ab7e1df4778ee46457cfa4 (diff)
Updated year in copyright notices.
Diffstat (limited to 'xs.h')
-rw-r--r--xs.h45
1 files changed, 27 insertions, 18 deletions
diff --git a/xs.h b/xs.h
index 36445e4..800e407 100644
--- a/xs.h
+++ b/xs.h
@@ -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;