summaryrefslogtreecommitdiff
path: root/xs.h
diff options
context:
space:
mode:
authorGravatar default2023-01-17 09:50:16 +0100
committerGravatar default2023-01-17 09:50:16 +0100
commita38c7aeadcc69b3405d40b008a0b87f7c5d023dc (patch)
treeafe36eed782e9731d2b7e95768c6937e4592c842 /xs.h
parentUpdated TODO. (diff)
downloadsnac2-a38c7aeadcc69b3405d40b008a0b87f7c5d023dc.tar.gz
snac2-a38c7aeadcc69b3405d40b008a0b87f7c5d023dc.tar.xz
snac2-a38c7aeadcc69b3405d40b008a0b87f7c5d023dc.zip
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 @@
1/* copyright (c) 2022 grunfink - MIT license */ 1/* copyright (c) 2022 - 2023 grunfink / MIT license */
2 2
3#ifndef _XS_H 3#ifndef _XS_H
4 4
@@ -53,7 +53,9 @@ d_char *xs_insert_m(d_char *data, int offset, const char *mem, int size);
53#define xs_insert(data, offset, data2) xs_insert_m(data, offset, data2, xs_size(data2)) 53#define xs_insert(data, offset, data2) xs_insert_m(data, offset, data2, xs_size(data2))
54#define xs_append_m(data, mem, size) xs_insert_m(data, xs_size(data) - 1, mem, size) 54#define xs_append_m(data, mem, size) xs_insert_m(data, xs_size(data) - 1, mem, size)
55d_char *xs_str_new(const char *str); 55d_char *xs_str_new(const char *str);
56#define xs_str_cat(str1, str2) xs_insert(str1, xs_size(str1) - 1, str2) 56d_char *xs_str_wrap_i(const char *prefix, d_char *str, const char *suffix);
57#define xs_str_prepend_i(str, prefix) xs_str_wrap_i(prefix, str, NULL)
58#define xs_str_cat(str, suffix) xs_str_wrap_i(NULL, str, suffix)
57d_char *xs_replace_i(d_char *str, const char *sfrom, const char *sto); 59d_char *xs_replace_i(d_char *str, const char *sfrom, const char *sto);
58#define xs_replace(str, sfrom, sto) xs_replace_i(xs_dup(str), sfrom, sto) 60#define xs_replace(str, sfrom, sto) xs_replace_i(xs_dup(str), sfrom, sto)
59d_char *xs_fmt(const char *fmt, ...); 61d_char *xs_fmt(const char *fmt, ...);
@@ -64,7 +66,6 @@ d_char *xs_crop_i(d_char *str, int start, int end);
64d_char *xs_strip_chars_i(d_char *str, const char *chars); 66d_char *xs_strip_chars_i(d_char *str, const char *chars);
65#define xs_strip_i(str) xs_strip_chars_i(str, " \r\n\t\v\f") 67#define xs_strip_i(str) xs_strip_chars_i(str, " \r\n\t\v\f")
66d_char *xs_tolower_i(d_char *str); 68d_char *xs_tolower_i(d_char *str);
67d_char *xs_str_prepend_i(d_char *str, const char *prefix);
68d_char *xs_list_new(void); 69d_char *xs_list_new(void);
69d_char *xs_list_append_m(d_char *list, const char *mem, int dsz); 70d_char *xs_list_append_m(d_char *list, const char *mem, int dsz);
70#define xs_list_append(list, data) xs_list_append_m(list, data, xs_size(data)) 71#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)
364} 365}
365 366
366 367
368d_char *xs_str_wrap_i(const char *prefix, d_char *str, const char *suffix)
369/* wraps str with prefix and suffix */
370{
371 if (prefix)
372 str = xs_insert_m(str, 0, prefix, strlen(prefix));
373
374 if (suffix)
375 str = xs_insert_m(str, xs_size(str) - 1, suffix, xs_size(suffix));
376
377 return str;
378}
379
380
367d_char *xs_replace_i(d_char *str, const char *sfrom, const char *sto) 381d_char *xs_replace_i(d_char *str, const char *sfrom, const char *sto)
368/* replaces inline all sfrom with sto */ 382/* replaces inline all sfrom with sto */
369{ 383{
@@ -490,18 +504,6 @@ d_char *xs_tolower_i(d_char *str)
490} 504}
491 505
492 506
493d_char *xs_str_prepend_i(d_char *str, const char *prefix)
494/* prepends prefix into string */
495{
496 int sz = strlen(prefix);
497
498 str = xs_expand(str, 0, sz);
499 memcpy(str, prefix, sz);
500
501 return str;
502}
503
504
505/** lists **/ 507/** lists **/
506 508
507d_char *xs_list_new(void) 509d_char *xs_list_new(void)
@@ -666,9 +668,16 @@ d_char *xs_list_set(d_char *list, int num, const char *data)
666d_char *xs_list_pop(d_char *list, char **data) 668d_char *xs_list_pop(d_char *list, char **data)
667/* pops the last element from the list */ 669/* pops the last element from the list */
668{ 670{
669 if ((*data = xs_list_get(list, -1)) != NULL) { 671 char *p = list, *v = NULL;
670 *data = xs_dup(*data); 672
671 list = xs_list_del(list, -1); 673 /* iterate to the end */
674 while (xs_list_iter(&p, &v));
675
676 if (v != NULL) {
677 *data = xs_dup(v);
678
679 /* collapse from the address of the element */
680 list = xs_collapse(list, v - 1 - list, xs_size(v - 1));
672 } 681 }
673 682
674 return list; 683 return list;