diff options
Diffstat (limited to 'lib/trim.c')
-rw-r--r-- | lib/trim.c | 54 |
1 files changed, 13 insertions, 41 deletions
@@ -1,9 +1,9 @@ /* Removes leading and/or trailing whitespaces - Copyright (C) 2006-2021 Free Software Foundation, Inc. + Copyright (C) 2006-2023 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or + the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -30,13 +30,6 @@ #include "mbiter.h" #include "xalloc.h" -/* Use this to suppress gcc's "...may be used before initialized" warnings. */ -#if defined GCC_LINT || defined lint -# define IF_LINT(Code) Code -#else -# define IF_LINT(Code) /* empty */ -#endif - char * trim2 (const char *s, int how) { @@ -65,42 +58,21 @@ trim2 (const char *s, int how) /* Trim trailing whitespaces. */ if (how != TRIM_LEADING) { - unsigned int state = 0; - char *r IF_LINT (= NULL); /* used only while state = 2 */ + char *start_of_spaces = NULL; mbi_init (i, d, strlen (d)); for (; mbi_avail (i); mbi_advance (i)) - { - if (state == 0 && mb_isspace (mbi_cur (i))) - continue; - - if (state == 0 && !mb_isspace (mbi_cur (i))) - { - state = 1; - continue; - } - - if (state == 1 && !mb_isspace (mbi_cur (i))) - continue; - - if (state == 1 && mb_isspace (mbi_cur (i))) - { - state = 2; - r = (char *) mbi_cur_ptr (i); - } - else if (state == 2 && mb_isspace (mbi_cur (i))) - { - /* empty */ - } - else - { - state = 1; - } - } - - if (state == 2) - *r = '\0'; + if (mb_isspace (mbi_cur (i))) + { + if (start_of_spaces == NULL) + start_of_spaces = (char *) mbi_cur_ptr (i); + } + else + start_of_spaces = NULL; + + if (start_of_spaces != NULL) + *start_of_spaces = '\0'; } } else |