string-util: add find_line[_after] functions

As a wrapper for `find_line_startswith`, `find_line_after` search for
the exact line and return the pointer for the next line, or NULL if
missing.

`find_line` with search for the exact line and return the pointer to the
beginning of the line.

Signed-off-by: Alberto Planas <aplanas@suse.com>
This commit is contained in:
Alberto Planas
2025-05-07 11:00:10 +02:00
parent 791847ea64
commit ba2d8107e2
2 changed files with 42 additions and 0 deletions

View File

@@ -1383,6 +1383,46 @@ char* find_line_startswith(const char *haystack, const char *needle) {
return p + strlen(needle);
}
char* find_line(const char *haystack, const char *needle) {
char *p;
assert(haystack);
assert(needle);
/* Finds the first line in 'haystack' that match the specified string. Returns a pointer to the
* beginning of the line */
p = find_line_startswith(haystack, needle);
if (!p)
return NULL;
if (*p == 0 || strchr(NEWLINE, *p))
return p - strlen(needle);
return NULL;
}
char* find_line_after(const char *haystack, const char *needle) {
char *p;
assert(haystack);
assert(needle);
/* Finds the first line in 'haystack' that match the specified string. Returns a pointer to the
* next line after it */
p = find_line_startswith(haystack, needle);
if (!p)
return NULL;
if (*p == 0)
return p;
if (strchr(NEWLINE, *p))
return p + 1;
return NULL;
}
bool version_is_valid(const char *s) {
if (isempty(s))
return false;