summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/util.c24
-rw-r--r--src/shared/util.h2
2 files changed, 19 insertions, 7 deletions
diff --git a/src/shared/util.c b/src/shared/util.c
index 4c30a98318..e2c955bc07 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -140,26 +140,38 @@ char* endswith(const char *s, const char *postfix) {
return (char*) s + sl - pl;
}
-bool first_word(const char *s, const char *word) {
+char* first_word(const char *s, const char *word) {
size_t sl, wl;
+ const char *p;
assert(s);
assert(word);
+ /* Checks if the string starts with the specified word, either
+ * followed by NUL or by whitespace. Returns a pointer to the
+ * NUL or the first character after the whitespace. */
+
sl = strlen(s);
wl = strlen(word);
if (sl < wl)
- return false;
+ return NULL;
if (wl == 0)
- return true;
+ return (char*) s;
if (memcmp(s, word, wl) != 0)
- return false;
+ return NULL;
+
+ p = s + wl;
+ if (*p == 0)
+ return (char*) p;
+
+ if (!strchr(WHITESPACE, *p))
+ return NULL;
- return s[wl] == 0 ||
- strchr(WHITESPACE, s[wl]);
+ p += strspn(p, WHITESPACE);
+ return (char*) p;
}
int close_nointr(int fd) {
diff --git a/src/shared/util.h b/src/shared/util.h
index 45294800e4..fd999bd942 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -169,7 +169,7 @@ static inline const char *startswith_no_case(const char *s, const char *prefix)
char *endswith(const char *s, const char *postfix) _pure_;
-bool first_word(const char *s, const char *word) _pure_;
+char *first_word(const char *s, const char *word) _pure_;
int close_nointr(int fd);
int safe_close(int fd);