/* Removes leading and/or trailing whitespaces Copyright (C) 2006 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 2, 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 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 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. */ /* Written by Davide Angelocola */ #ifdef HAVE_CONFIG_H # include #endif #include #if HAVE_MBRTOWC # include "mbiter.h" #endif #include "mbchar.h" #include "xalloc.h" #include "trim.h" char * trim2(const char *s, int how) { mbi_iterator_t i; char *d; d = xstrdup(s); if (!d) xalloc_die(); /* 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); } /* Trim trailing whitespaces. */ if (how != TRIM_LEADING) { char *x = d + strlen(d) - 1; for(;;) { mbi_init(i, x, strlen(x)); if (!mbi_avail (i)) break; if (!mb_isspace(mbi_cur(i))) break; *x-- = 0; } } return d; } int main(void) { char buf[] = " a string "; printf("trim = '%s'\n", trim(buf)); printf("trim_leading = '%s'\n", trim_leading(buf)); printf("trim_trailing = '%s'\n", trim_trailing(buf)); return 0; }