123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #include "precompile.h"
- #include "vsscanf.h"
- #include <stdio.h>
- #include <stdarg.h>
- #include <memory.h>
- #include "dbgutil.h"
- #define MAX_ARGS 10
- TOOLKIT_API int vsscanf1(const char *str, const char *format, va_list arg)
- {
- void *args[MAX_ARGS];
- int count = 0;
- const char *p = format;
- int i;
- int rc = 0;
- while(1)
- {
- char c = *(p++);
- if(c==0) break;
- if(c=='%' && (p[0]!='*' && p[0]!='%')) ++count;
- }
- TOOLKIT_ASSERT(count <= MAX_ARGS);
- for (i = 0; i < count; ++i) {
- args[i] = va_arg(arg, void*);
- }
- switch (count) {
- case 0:
- rc = sscanf(str, format);
- break;
- case 1:
- rc = sscanf(str, format, args[0]);
- break;
- case 2:
- rc = sscanf(str, format, args[0], args[1]);
- break;
- case 3:
- rc = sscanf(str, format, args[0], args[1], args[2]);
- break;
- case 4:
- rc = sscanf(str, format, args[0], args[1], args[2], args[3]);
- break;
- case 5:
- rc = sscanf(str, format, args[0], args[1], args[2], args[3], args[4]);
- break;
- case 6:
- rc = sscanf(str, format, args[0], args[1], args[2], args[3], args[4], args[5]);
- break;
- case 7:
- rc = sscanf(str, format, args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
- break;
- case 8:
- rc = sscanf(str, format, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
- break;
- case 9:
- rc = sscanf(str, format, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]);
- break;
- case 10:
- rc = sscanf(str, format, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
- break;
- default:
- break;
- }
- return rc;
- }
|