From: Urban Wallasch Date: Wed, 30 Oct 2019 23:59:09 +0000 (+0100) Subject: * str: fixed utterly broken str_rtrim() X-Git-Url: https://git.packet-gain.de/?a=commitdiff_plain;h=e143b2dca5e8046afffae6fbe26ae19c9af42b4d;p=oddbits.git * str: fixed utterly broken str_rtrim() --- diff --git a/str/str.h b/str/str.h index adb2cc8..6270d2b 100644 --- a/str/str.h +++ b/str/str.h @@ -329,7 +329,17 @@ static inline char *str_ltrim(char *s, const char *trimset, bool notin) { } static inline char *str_rtrim(char *s, const char *trimset, bool notin) { - *(str_delim(s, trimset, notin)) = '\0'; + char *rs, *p; + + rs = p = s + strlen(s); + while (rs > s) { + --rs; + if (!!strchr(trimset, *rs) ^ notin) + p = rs; + else + break; + } + *p = '\0'; return s; } diff --git a/str/str_test.c b/str/str_test.c index 9414f95..b08b322 100644 --- a/str/str_test.c +++ b/str/str_test.c @@ -301,19 +301,27 @@ int main(void) { { H("str_ltrim, str_rtrim, str_trim"); - char s1[] = ",.-XXX,.-"; + char s1[] = ",.-XX-,.XX,.-"; D(s1); - T(strcmp(str_ltrim(s1, "-,.", false), "XXX,.-") == 0); + T(strcmp(str_ltrim(s1, "-,.", false), "XX-,.XX,.-") == 0); D(s1); - T(strcmp(str_rtrim(s1, "-,.", false), "XXX") == 0); + T(strcmp(str_rtrim(s1, "-,.", false), "XX-,.XX") == 0); D(s1); - T(strcmp(str_rtrim(s1, "-,.", true), "") == 0); - char s2[] = "***XXX***"; + T(strcmp(str_rtrim(s1, "-,.", true), "XX-,.") == 0); + char s2[] = "*+*XX**XX+*+"; D(s2); - T(strcmp(str_trim(s2, "*", false), "XXX") == 0); - char s3[] = "XXX***XXX"; + T(strcmp(str_trim(s2, "*+", false), "XX**XX") == 0); + char s3[] = "XX+X**XX**X+XX"; D(s3); - T(strcmp(str_trim(s3, "*", true), "***") == 0); + T(strcmp(str_trim(s3, "*", true), "**XX**") == 0); + char s4[] = ""; + D(s4); + T(strcmp(str_rtrim(s4, "asdf", false), "") == 0); + T(strcmp(str_rtrim(s4, "asdf", true), "") == 0); + char s5[] = "asdf"; + D(s5); + T(strcmp(str_rtrim(s5, "", false), "asdf") == 0); + T(strcmp(str_rtrim(s5, "", true), "") == 0); } /*****************************************/