Rev 8793 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 8793 | Rev 9868 | ||
---|---|---|---|
Line 1... | Line -... | ||
1 | #include |
- | |
2 | #include |
1 | #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; |
2 | #include |
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 34... | Line 3... | ||
34 | 3 | ||
35 | int sscanf ( const char * s, const char * format, ...) |
4 | int sscanf(const char* s, const char* format, ...) |
36 | { |
5 | { |
37 | va_list arg; |
6 | va_list arg; |
38 | int n; |
7 | int n; |
39 | va_start(arg, format); |
- | |
40 | 8 | va_start(arg, format); |
|
41 | n = vsscanf(s, format, arg); |
- | |
42 | 9 | n = vsscanf(s, format, arg); |
|
43 | va_end(arg); |
10 | va_end(arg); |
44 | return n; |
11 | return n; |
45 | } |
- |