Rev 8687 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 8687 | Rev 8718 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | #include |
1 | #include |
- | 2 | #include |
|
- | 3 | ||
- | 4 | int virtual_getc_str(void *sp, const void *obj) |
|
- | 5 | // get next chat from string obj, save point is ptr to string char ptr |
|
- | 6 | { |
|
- | 7 | int ch; |
|
- | 8 | const char *s = (const char *)obj; |
|
- | 9 | const char**spc= (const char**)sp; |
|
- | 10 | if (!s || !spc) return EOF; // error |
|
- | 11 | ||
- | 12 | if (!*spc) *spc = s; // first call, init savepoint |
|
- | 13 | ||
- | 14 | if (!**spc) return EOF; // EOS |
|
- | 15 | ||
- | 16 | ch = **spc; (*spc)++ ; |
|
- | 17 | ||
- | 18 | return ch; |
|
- | 19 | } |
|
- | 20 | ||
- | 21 | void virtual_ungetc_str(void *sp, int c, const void *obj) |
|
- | 22 | // if can, one step back savepoint in s |
|
- | 23 | { |
|
- | 24 | const char *s = (const char *)obj; |
|
- | 25 | const char**spc= (const char**)sp; |
|
- | 26 | ||
- | 27 | if (s && spc && *spc > s) (*spc)--; |
|
- | 28 | } |
|
- | 29 | ||
- | 30 | int vsscanf ( const char * s, const char * format, va_list arg ) |
|
- | 31 | { |
|
- | 32 | return format_scan(s, format, arg, &virtual_getc_str, &virtual_ungetc_str); |
|
- | 33 | }; |
|
Line 2... | Line 34... | ||
2 | 34 | ||
3 | int sscanf(const char * s, const char * format, ...) |
35 | int sscanf ( const char * s, const char * format, ...) |
4 | { |
36 | { |
5 | va_list arg; |
37 | va_list arg; |
6 | int n; |
38 | int n; |
- | 39 | va_start(arg, format); |
|
7 | va_start(arg, format); |
40 | |
- | 41 | n = vsscanf(s, format, arg); |
|
8 | n = vsscanf(s, format, arg); |
42 | |
9 | va_end(arg); |
43 | va_end(arg); |
10 | return n; |
44 | return n; |