string-helpers: add str_endswith_ignore_case()

This commit is contained in:
Consolatis 2025-01-06 07:19:15 +01:00 committed by Hiroaki Yamamoto
parent 41aa7e1a7d
commit 10c6abb36a
2 changed files with 37 additions and 3 deletions

View file

@ -73,6 +73,17 @@ char *str_join(const char *const parts[],
*/
bool str_endswith(const char *const string, const char *const suffix);
/**
* str_endswith_ignore_case - indicate whether a string ends with a given suffix
* @string: string to test
* @suffix: suffix to expect in string
*
* If suffix is "" or NULL, this method always returns true; otherwise, this
* method returns true if and only if the full suffix exists at the end of the
* string.
*/
bool str_endswith_ignore_case(const char *const string, const char *const suffix);
/**
* str_starts_with - indicate whether a string starts with a given character
* @string: string to test

View file

@ -2,11 +2,18 @@
#include <assert.h>
#include <ctype.h>
#include <stdarg.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include "common/mem.h"
#include "common/string-helpers.h"
enum str_flags {
STR_FLAG_NONE = 0,
STR_FLAG_IGNORE_CASE,
};
bool
string_null_or_empty(const char *s)
{
@ -154,8 +161,8 @@ str_join(const char *const parts[],
return buf;
}
bool
str_endswith(const char *const string, const char *const suffix)
static bool
_str_endswith(const char *const string, const char *const suffix, uint32_t flags)
{
size_t len_str = string ? strlen(string) : 0;
size_t len_sfx = suffix ? strlen(suffix) : 0;
@ -168,7 +175,23 @@ str_endswith(const char *const string, const char *const suffix)
return true;
}
return strcmp(string + len_str - len_sfx, suffix) == 0;
if (flags & STR_FLAG_IGNORE_CASE) {
return strcasecmp(string + len_str - len_sfx, suffix) == 0;
} else {
return strcmp(string + len_str - len_sfx, suffix) == 0;
}
}
bool
str_endswith(const char *const string, const char *const suffix)
{
return _str_endswith(string, suffix, STR_FLAG_NONE);
}
bool
str_endswith_ignore_case(const char *const string, const char *const suffix)
{
return _str_endswith(string, suffix, STR_FLAG_IGNORE_CASE);
}
bool