X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=inline;f=lib%2Fwordsplit.c;h=d13f21087792fe8774a56be483dafdc678635924;hb=5ff0a5b047624c8f215da9cd6c7182d609fcbd01;hp=b1b2ada3fd58e8f1c38fc88ef1dc4ab3e9cc5f2b;hpb=03846211ba84582b133a985200502a39462dfe66;p=libucw.git diff --git a/lib/wordsplit.c b/lib/wordsplit.c index b1b2ada3..d13f2108 100644 --- a/lib/wordsplit.c +++ b/lib/wordsplit.c @@ -1,18 +1,38 @@ /* - * Sherlock Library -- Word Splitting + * UCW Library -- Word Splitting * - * (c) 1997 Martin Mares, + * (c) 1997 Martin Mares + * (c) 2004 Robert Spalek + * + * This software may be freely distributed and used according to the terms + * of the GNU Lesser General Public License. */ -#include +#include "lib/lib.h" +#include "lib/chartype.h" + +#include -#include "lib.h" -#include "string.h" +int +sepsplit(byte *str, byte sep, byte **rec, uns max) +{ + uns cnt = 0; + while (1) + { + rec[cnt++] = str; + str = strchr(str, sep); + if (!str) + return cnt; + if (cnt >= max) + return -1; + *str++ = 0; + } +} int wordsplit(byte *src, byte **dst, uns max) { - int cnt = 0; + uns cnt = 0; for(;;) { @@ -22,9 +42,21 @@ wordsplit(byte *src, byte **dst, uns max) break; if (cnt >= max) return -1; - dst[cnt++] = src; - while (*src && !Cspace(*src)) - src++; + if (*src == '"') + { + src++; + dst[cnt++] = src; + while (*src && *src != '"') + src++; + if (*src) + *src++ = 0; + } + else + { + dst[cnt++] = src; + while (*src && !Cspace(*src)) + src++; + } } return cnt; }