summaryrefslogtreecommitdiffstats
path: root/bstr.h
diff options
context:
space:
mode:
Diffstat (limited to 'bstr.h')
-rw-r--r--bstr.h20
1 files changed, 19 insertions, 1 deletions
diff --git a/bstr.h b/bstr.h
index 09b1fda489..d3434cfa13 100644
--- a/bstr.h
+++ b/bstr.h
@@ -64,7 +64,6 @@ int bstrcspn(struct bstr str, const char *reject);
int bstr_find(struct bstr haystack, struct bstr needle);
struct bstr *bstr_splitlines(void *talloc_ctx, struct bstr str);
-struct bstr bstr_getline(struct bstr str, struct bstr *rest);
struct bstr bstr_lstrip(struct bstr str);
struct bstr bstr_strip(struct bstr str);
struct bstr bstr_split(struct bstr str, const char *sep, struct bstr *rest);
@@ -87,11 +86,30 @@ int bstr_decode_utf8(struct bstr str, struct bstr *out_next);
// On error, -1 is returned. On success, it returns a value in the range [1, 4].
int bstr_parse_utf8_code_length(unsigned char b);
+// Return the text before the next line break, and return it. Change *rest to
+// point to the text following this line break. (rest can be NULL.)
+// Line break characters are not stripped.
+struct bstr bstr_getline(struct bstr str, struct bstr *rest);
+
+// Strip one trailing line break. This is intended for use with bstr_getline,
+// and will remove the trailing \n or \r\n sequence.
+struct bstr bstr_strip_linebreaks(struct bstr str);
+
// If s starts with prefix, return true and return the rest of the string in s.
bool bstr_eatstart(struct bstr *s, struct bstr prefix);
+bool bstr_case_startswith(struct bstr s, struct bstr prefix);
+bool bstr_case_endswith(struct bstr s, struct bstr suffix);
+struct bstr bstr_strip_ext(struct bstr str);
+struct bstr bstr_get_ext(struct bstr s);
+
static inline struct bstr bstr_cut(struct bstr str, int n)
{
+ if (n < 0) {
+ n += str.len;
+ if (n < 0)
+ n = 0;
+ }
if (n > str.len)
n = str.len;
return (struct bstr){str.start + n, str.len - n};