vsscanf1.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "precompile.h"
  2. #include "vsscanf.h"
  3. #include <stdio.h>
  4. #include <stdarg.h>
  5. #include <memory.h>
  6. #include "dbgutil.h"
  7. #define MAX_ARGS 10
  8. TOOLKIT_API int vsscanf1(const char *str, const char *format, va_list arg)
  9. {
  10. void *args[MAX_ARGS];
  11. int count = 0;
  12. const char *p = format;
  13. int i;
  14. int rc = 0;
  15. while(1)
  16. {
  17. char c = *(p++);
  18. if(c==0) break;
  19. if(c=='%' && (p[0]!='*' && p[0]!='%')) ++count;
  20. }
  21. TOOLKIT_ASSERT(count <= MAX_ARGS);
  22. for (i = 0; i < count; ++i) {
  23. args[i] = va_arg(arg, void*);
  24. }
  25. switch (count) {
  26. case 0:
  27. rc = sscanf(str, format);
  28. break;
  29. case 1:
  30. rc = sscanf(str, format, args[0]);
  31. break;
  32. case 2:
  33. rc = sscanf(str, format, args[0], args[1]);
  34. break;
  35. case 3:
  36. rc = sscanf(str, format, args[0], args[1], args[2]);
  37. break;
  38. case 4:
  39. rc = sscanf(str, format, args[0], args[1], args[2], args[3]);
  40. break;
  41. case 5:
  42. rc = sscanf(str, format, args[0], args[1], args[2], args[3], args[4]);
  43. break;
  44. case 6:
  45. rc = sscanf(str, format, args[0], args[1], args[2], args[3], args[4], args[5]);
  46. break;
  47. case 7:
  48. rc = sscanf(str, format, args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
  49. break;
  50. case 8:
  51. rc = sscanf(str, format, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
  52. break;
  53. case 9:
  54. rc = sscanf(str, format, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]);
  55. break;
  56. case 10:
  57. rc = sscanf(str, format, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
  58. break;
  59. default:
  60. break;
  61. }
  62. return rc;
  63. }