chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
resolved: read the system /etc/resolv.conf unless we wrote it ourselves
[elogind.git]
/
src
/
shared
/
util.c
diff --git
a/src/shared/util.c
b/src/shared/util.c
index 76cee19261e67a8c8aaca35107374fa366f1c7e6..e2c955bc0700594620a7c517d2a368c7593f296e 100644
(file)
--- 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;
}
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;
size_t sl, wl;
+ const char *p;
assert(s);
assert(word);
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)
sl = strlen(s);
wl = strlen(word);
if (sl < wl)
- return
false
;
+ return
NULL
;
if (wl == 0)
if (wl == 0)
- return
true
;
+ return
(char*) s
;
if (memcmp(s, word, wl) != 0)
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) {
}
int close_nointr(int fd) {
@@
-1230,7
+1242,7
@@
char *cunescape_length_with_prefix(const char *s, size_t length, const char *pre
r = new(char, pl+length+1);
if (!r)
r = new(char, pl+length+1);
if (!r)
- return
r
;
+ return
NULL
;
if (prefix)
memcpy(r, prefix, pl);
if (prefix)
memcpy(r, prefix, pl);