libutil: Add util_startswith() to util_str

Add util_startswith to util_str to check if a string starts with the
given prefix and returns a pointer to the rest of the string,
or NULL if it does not.

Signed-off-by: Wisdom Erhimwionsobo <werh29@linux.ibm.com>
Reviewed-by: Jan Höppner <hoeppner@linux.ibm.com>
Reviewed-by: Steffen Eiden <seiden@linux.ibm.com>
Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
This commit is contained in:
Wisdom Erhimwionsobo
2025-09-29 11:57:56 +02:00
committed by Jan Höppner
parent 28815d3928
commit aa29a5f1f9
2 changed files with 47 additions and 1 deletions

View File

@@ -13,5 +13,7 @@
#define LIB_UTIL_STR_H #define LIB_UTIL_STR_H
void util_str_rm_whitespace(const char *src, char *dest); void util_str_rm_whitespace(const char *src, char *dest);
const char *util_startswith(const char *s, const char *prefix);
const char *util_startswith_no_case(const char *s, const char *prefix);
#endif /** LIB_UTIL_STR_H @} */ #endif /** LIB_UTIL_STR_H @} */

View File

@@ -3,14 +3,16 @@
* *
* Manipulate and work with strings * Manipulate and work with strings
* *
* Copyright IBM Corp. 2025 * Copyright IBM Corp. 2026
* *
* s390-tools is free software; you can redistribute it and/or modify * s390-tools is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details. * it under the terms of the MIT license. See LICENSE for details.
*/ */
#include <ctype.h> #include <ctype.h>
#include <string.h>
#include "lib/util_panic.h"
#include "lib/util_str.h" #include "lib/util_str.h"
/** /**
@@ -31,3 +33,45 @@ void util_str_rm_whitespace(const char *src, char *dest)
} }
*dest = '\0'; *dest = '\0';
} }
/**
* Check if string \a s starts with \a prefix
*
* @param[in] s String to check
* @param[in] prefix Prefix to match
*
* @returns Pointer to the character after the prefix if match is found,
* NULL otherwise
*/
const char *util_startswith(const char *s, const char *prefix)
{
size_t sz;
util_assert(s != NULL, "Internal error: s input is NULL");
util_assert(prefix != NULL, "Internal error: prefix input is NULL");
sz = strlen(prefix);
if (strncmp(s, prefix, sz) == 0)
return s + sz;
return NULL;
}
/**
* Check if string \a s starts with \a prefix (case-insensitive)
*
* @param[in] s String to check
* @param[in] prefix Prefix to match (case-insensitive)
*
* @returns Pointer to the character after the prefix if match is found,
* NULL otherwise
*/
const char *util_startswith_no_case(const char *s, const char *prefix)
{
size_t sz;
util_assert(s != NULL, "Internal error: s input is NULL");
util_assert(prefix != NULL, "Internal error: prefix input is NULL");
sz = strlen(prefix);
if (strncasecmp(s, prefix, sz) == 0)
return s + sz;
return NULL;
}