]> mj.ucw.cz Git - libucw.git/blobdiff - lib/wordsplit.c
fixes
[libucw.git] / lib / wordsplit.c
index b1b2ada3fd58e8f1c38fc88ef1dc4ab3e9cc5f2b..d13f21087792fe8774a56be483dafdc678635924 100644 (file)
@@ -1,18 +1,38 @@
 /*
- *     Sherlock Library -- Word Splitting
+ *     UCW Library -- Word Splitting
  *
- *     (c) 1997 Martin Mares, <mj@atrey.karlin.mff.cuni.cz>
+ *     (c) 1997 Martin Mares <mj@ucw.cz>
+ *     (c) 2004 Robert Spalek <robert@ucw.cz>
+ *
+ *     This software may be freely distributed and used according to the terms
+ *     of the GNU Lesser General Public License.
  */
 
-#include <stdio.h>
+#include "lib/lib.h"
+#include "lib/chartype.h"
+
+#include <string.h>
 
-#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;
 }