X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Ftrim.c;h=c8b0c7fe49eebcbb5f0e46c109f9f3b3944de082;hb=7c59efd8bc7abb8c79ae969a65ece95e68c9be4c;hp=78f84b2d94b9066f8a1e8108c723191153105245;hpb=0631ee73aea142c346c7a3026209ef3cc7b30b22;p=gnulib.git diff --git a/lib/trim.c b/lib/trim.c index 78f84b2d9..c8b0c7fe4 100644 --- a/lib/trim.c +++ b/lib/trim.c @@ -1,10 +1,10 @@ /* Removes leading and/or trailing whitespaces - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006-2010 Free Software Foundation, Inc. - This program is free software; you can redistribute it and/or modify + 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 2, or (at your option) - any later version. + 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, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -12,121 +12,122 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ /* Written by Davide Angelocola */ -#ifdef HAVE_CONFIG_H -# include -#endif +#include -#if HAVE_MBRTOWC -# include -# include "mbchar.h" -# include "mbiter.h" -# include "mbuiter.h" /* FIXME: for MB_CUR_MAX */ -#else -# include -#endif +/* Specification. */ +#include "trim.h" + +#include +#include +#include +#include +#include "mbchar.h" +#include "mbiter.h" #include "xalloc.h" -#include "trim.h" + +/* Use this to suppress gcc's `...may be used before initialized' warnings. */ +#ifdef lint +# define IF_LINT(Code) Code +#else +# define IF_LINT(Code) /* empty */ +#endif char * -trim2(const char *s, int how) +trim2 (const char *s, int how) { char *d; - - d = strdup(s); + + d = strdup (s); if (!d) - xalloc_die(); - -#if HAVE_MBRTOWC + xalloc_die (); + if (MB_CUR_MAX > 1) { mbi_iterator_t i; - + /* Trim leading whitespaces. */ - if (how != TRIM_TRAILING) - { - mbi_init (i, d, strlen (d)); - - for (; mbi_avail (i) && mb_isspace (mbi_cur (i)); mbi_advance (i)) - ; - - memmove (d, mbi_cur_ptr (i), strlen (mbi_cur_ptr (i)) + 1); - } - + if (how != TRIM_TRAILING) + { + mbi_init (i, d, strlen (d)); + + for (; mbi_avail (i) && mb_isspace (mbi_cur (i)); mbi_advance (i)) + ; + + memmove (d, mbi_cur_ptr (i), strlen (mbi_cur_ptr (i)) + 1); + } + /* Trim trailing whitespaces. */ - if (how != TRIM_LEADING) - { - int state = 0; - char *r; - - mbi_init (i, d, strlen (d)); - - for (; mbi_avail (i); mbi_advance (i)) - { - if (state == 0 && mb_isspace (mbi_cur (i))) - { - state = 0; - continue; - } - - if (state == 0 && !mb_isspace (mbi_cur (i))) - { - state = 1; - continue; - } - - if (state == 1 && !mb_isspace (mbi_cur (i))) - { - state = 1; - 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))) - { - state = 2; - } - else - { - state = 1; - } - } - - if (state == 2) - *r = '\0'; - } + if (how != TRIM_LEADING) + { + int state = 0; + char *r IF_LINT (= NULL); /* used only while state = 2 */ + + mbi_init (i, d, strlen (d)); + + for (; mbi_avail (i); mbi_advance (i)) + { + if (state == 0 && mb_isspace (mbi_cur (i))) + { + state = 0; + continue; + } + + if (state == 0 && !mb_isspace (mbi_cur (i))) + { + state = 1; + continue; + } + + if (state == 1 && !mb_isspace (mbi_cur (i))) + { + state = 1; + 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))) + { + state = 2; + } + else + { + state = 1; + } + } + + if (state == 2) + *r = '\0'; + } } else -#endif /* HAVE_MBRTOWC */ { char *p; - + /* Trim leading whitespaces. */ if (how != TRIM_TRAILING) { - for (p = d; *p && isspace (*p); p++) - ; + for (p = d; *p && isspace ((unsigned char) *p); p++) + ; - memmove (d, p, strlen (p) + 1); + memmove (d, p, strlen (p) + 1); } /* Trim trailing whitespaces. */ if (how != TRIM_LEADING) { - for (p = d + strlen (d) - 1; p >= d && isspace (*p); p--) - *p = '\0'; + for (p = d + strlen (d) - 1; p >= d && isspace ((unsigned char) *p); p--) + *p = '\0'; } } - + return d; } - +