X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fmbsspn.c;h=40f33d3fefbd651f110113c359fd06285391db1f;hb=fdf6b0ba132b0f8cfacf2ad5d31e366757c7ac34;hp=f25c9096c1412314230a89fb03ad46fe2109b9fa;hpb=2a2eb440165889566a738cd355381b4b28870206;p=gnulib.git diff --git a/lib/mbsspn.c b/lib/mbsspn.c index f25c9096c..40f33d3fe 100644 --- a/lib/mbsspn.c +++ b/lib/mbsspn.c @@ -1,11 +1,11 @@ /* Searching a string for a character outside a given set of characters. - Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2006-2008 Free Software Foundation, Inc. Written by Bruno Haible , 2007. - 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 @@ -13,17 +13,14 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ #include /* Specification. */ #include -#if HAVE_MBRTOWC -# include "mbuiter.h" -#endif +#include "mbuiter.h" /* Find the first occurrence in the character string STRING of any character not in the character string REJECT. Return the number of bytes from the @@ -39,59 +36,54 @@ mbsspn (const char *string, const char *reject) { unsigned char uc = (unsigned char) reject[0]; -#if HAVE_MBRTOWC if (MB_CUR_MAX > 1) - { - mbui_iterator_t iter; + { + mbui_iterator_t iter; - for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) - if (!(mb_len (mbui_cur (iter)) == 1 - && (unsigned char) * mbui_cur_ptr (iter) == uc)) - return mbui_cur_ptr (iter) - string; - return strlen (string); - } + for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) + if (!(mb_len (mbui_cur (iter)) == 1 + && (unsigned char) * mbui_cur_ptr (iter) == uc)) + break; + return mbui_cur_ptr (iter) - string; + } else -#endif - { - const char *ptr; + { + const char *ptr; - for (ptr = string; *ptr != '\0'; ptr++) - if ((unsigned char) *ptr != uc) - break; - return ptr - string; - } + for (ptr = string; *ptr != '\0'; ptr++) + if ((unsigned char) *ptr != uc) + break; + return ptr - string; + } } /* General case. */ -#if HAVE_MBRTOWC if (MB_CUR_MAX > 1) { mbui_iterator_t iter; for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) - { - if (mb_len (mbui_cur (iter)) == 1) - { - if (mbschr (reject, (unsigned char) * mbui_cur_ptr (iter)) == NULL) - return mbui_cur_ptr (iter) - string; - } - else - { - mbui_iterator_t aiter; + { + if (mb_len (mbui_cur (iter)) == 1) + { + if (mbschr (reject, * mbui_cur_ptr (iter)) == NULL) + goto found; + } + else + { + mbui_iterator_t aiter; - for (mbui_init (aiter, reject); - mbui_avail (aiter); - mbui_advance (aiter)) - { - if (!mbui_avail (aiter)) - return mbui_cur_ptr (iter) - string; - if (mb_equal (mbui_cur (aiter), mbui_cur (iter))) - break; - } - } - } - return strlen (string); + for (mbui_init (aiter, reject);; mbui_advance (aiter)) + { + if (!mbui_avail (aiter)) + goto found; + if (mb_equal (mbui_cur (aiter), mbui_cur (iter))) + break; + } + } + } + found: + return mbui_cur_ptr (iter) - string; } else -#endif return strspn (string, reject); }