X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=lib%2Fwordsplit.c;h=2e50edc16dfd04ce132a08d79890f3b88f5bd88c;hb=534019614dd611e7df29a0c8c59f2a869a2c0c39;hp=b1b2ada3fd58e8f1c38fc88ef1dc4ab3e9cc5f2b;hpb=03846211ba84582b133a985200502a39462dfe66;p=libucw.git diff --git a/lib/wordsplit.c b/lib/wordsplit.c index b1b2ada3..2e50edc1 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(char *str, uns sep, char **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) +wordsplit(char *src, char **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; }