From: havoc Date: Sun, 5 Oct 2003 13:48:03 +0000 (+0000) Subject: added COM_ReadAndTokenizeLine, a useful parsing function X-Git-Tag: xonotic-v0.1.0preview~6346 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=commitdiff_plain;h=0421c486613a2ac0363f8e8746cd593b45e0de01 added COM_ReadAndTokenizeLine, a useful parsing function git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@3539 d7cf8633-e32d-0410-b094-e92efae38249 --- diff --git a/common.c b/common.c index e8c0893f..01609278 100644 --- a/common.c +++ b/common.c @@ -884,6 +884,55 @@ int COM_StringBeginsWith(const char *s, const char *match) return true; } +int COM_ReadAndTokenizeLine(const char **text, char **argv, int maxargc, char *tokenbuf, int tokenbufsize) +{ + int argc; + char *tokenbufend; + const char *l; + argc = 0; + tokenbufend = tokenbuf + tokenbufsize; + l = *text; + while (*l && *l != '\n') + { + if (*l > ' ') + { + if (argc >= maxargc) + return -1; + argv[argc++] = tokenbuf; + if (*l == '"') + { + l++; + while (*l && *l != '"') + { + if (tokenbuf >= tokenbufend) + return -1; + *tokenbuf++ = *l++; + } + if (*l == '"') + l++; + } + else + { + while (*l > ' ') + { + if (tokenbuf >= tokenbufend) + return -1; + *tokenbuf++ = *l++; + } + } + if (tokenbuf >= tokenbufend) + return -1; + *tokenbuf++ = 0; + } + else + l++; + } + if (*l == '\n') + l++; + *text = l; + return argc; +} + // written by Elric, thanks Elric! char *SearchInfostring(const char *infostring, const char *key) { diff --git a/common.h b/common.h index 832561a2..a10242a6 100644 --- a/common.h +++ b/common.h @@ -180,6 +180,8 @@ void COM_ToLowerString (const char *in, char *out, size_t size_out); void COM_ToUpperString (const char *in, char *out, size_t size_out); int COM_StringBeginsWith(const char *s, const char *match); +int COM_ReadAndTokenizeLine(const char **text, char **argv, int maxargc, char *tokenbuf, int tokenbufsize); + typedef struct stringlist_s { struct stringlist_s *next;