From 3cd4f1d15146c08f05206d6328ecbc1c7fdc8dfa Mon Sep 17 00:00:00 2001 From: Charles Forsyth Date: Mon, 30 Jun 2014 10:57:08 +0100 Subject: update to match lib9 --- libkern/tokenize.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 3 deletions(-) (limited to 'libkern/tokenize.c') diff --git a/libkern/tokenize.c b/libkern/tokenize.c index 1b222c52..790b7c2a 100644 --- a/libkern/tokenize.c +++ b/libkern/tokenize.c @@ -3,14 +3,14 @@ static char qsep[] = " \t\r\n"; static char* -qtoken(char *s) +qtoken(char *s, char *sep) { int quoting; char *t; quoting = 0; t = s; /* s is output string, t is input string */ - while(*t!='\0' && (quoting || utfrune(qsep, *t)==nil)){ + while(*t!='\0' && (quoting || utfrune(sep, *t)==nil)){ if(*t != '\''){ *s++ = *t++; continue; @@ -40,6 +40,54 @@ qtoken(char *s) return t; } +static char* +etoken(char *t, char *sep) +{ + int quoting; + + /* move to end of next token */ + quoting = 0; + while(*t!='\0' && (quoting || utfrune(sep, *t)==nil)){ + if(*t != '\''){ + t++; + continue; + } + /* *t is a quote */ + if(!quoting){ + quoting = 1; + t++; + continue; + } + /* quoting and we're on a quote */ + if(t[1] != '\''){ + /* end of quoted section; absorb closing quote */ + t++; + quoting = 0; + continue; + } + /* doubled quote; fold one quote into two */ + t += 2; + } + return t; +} + +int +gettokens(char *s, char **args, int maxargs, char *sep) +{ + int nargs; + + for(nargs=0; nargs