diff options
| author | Karl Kurbjun <kkurbjun@gmail.com> | 2006-12-13 04:55:48 +0000 |
|---|---|---|
| committer | Karl Kurbjun <kkurbjun@gmail.com> | 2006-12-13 04:55:48 +0000 |
| commit | 1e0fb0246b5692182be22182cd769ae1ed39cd7a (patch) | |
| tree | 004ca494b10cac811d45373d0cb71c061af6a98c | |
| parent | 9516afce64625cc29248041fdad79f05e7f34b10 (diff) | |
| download | rockbox-1e0fb0246b5692182be22182cd769ae1ed39cd7a.zip rockbox-1e0fb0246b5692182be22182cd769ae1ed39cd7a.tar.gz rockbox-1e0fb0246b5692182be22182cd769ae1ed39cd7a.tar.bz2 rockbox-1e0fb0246b5692182be22182cd769ae1ed39cd7a.tar.xz | |
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
| -rw-r--r-- | firmware/common/sscanf.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/firmware/common/sscanf.c b/firmware/common/sscanf.c index c710a10..66bf0dd 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, @@ -175,6 +195,11 @@ static int scan(int (*peek)(void *userp), 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; default: @@ -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); |