#include "precompile.h" #include "vsscanf.h" #include #include #include #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; }