From 1e0fb0246b5692182be22182cd769ae1ed39cd7a Mon Sep 17 00:00:00 2001 From: Karl Kurbjun Date: Wed, 13 Dec 2006 04:55:48 +0000 Subject: [PATCH] Some fixes and additions to sscanf - Still has bugs but it works for doom currently. As a note: this function is only used by doom to my knowledge. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11740 a1c6a512-1295-4272-9138-f99709370657 --- firmware/common/sscanf.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/firmware/common/sscanf.c b/firmware/common/sscanf.c index c710a10349..66bf0dd354 100644 --- a/firmware/common/sscanf.c +++ b/firmware/common/sscanf.c @@ -51,6 +51,26 @@ static int parse_dec(int (*peek)(void *userp), return n; } +static int parse_chars(int (*peek)(void *userp), + void (*pop)(void *userp), + void *userp, + char *vp) +{ + int n = 0; + char *pt=vp; + + while (!isspace((*peek)(userp))) + { + *(pt++) = (*peek)(userp); + n++; + (*pop)(userp); + } + + (*pt)='\0'; + + return n; +} + static int parse_hex(int (*peek)(void *userp), void (*pop)(void *userp), void *userp, @@ -174,6 +194,11 @@ static int scan(int (*peek)(void *userp), literal = true; break; } + break; + case 's': + n_chars += skip_spaces(peek, pop, userp); + n_chars += parse_chars(peek,pop, userp,va_arg(ap, char *) ); + n++; break; case '\0': return n; @@ -188,7 +213,7 @@ static int scan(int (*peek)(void *userp), { n_chars += skip_spaces(peek, pop, userp); if ((*peek)(userp) != ch) - return n; + continue; else { (*pop)(userp);