kstdio.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /*
  2. * Copyright (c) 2006-2024, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2024-03-10 Meco Man the first version
  9. */
  10. #include <rtthread.h>
  11. #if defined(RT_KLIBC_USING_LIBC_VSSCANF) || \
  12. defined(RT_KLIBC_USING_LIBC_VSNPRINTF)
  13. #include <stdio.h>
  14. #endif
  15. /**
  16. * @brief This function will fill a formatted string to buffer.
  17. *
  18. * @param buf is the buffer to save formatted string.
  19. *
  20. * @param size is the size of buffer.
  21. *
  22. * @param fmt is the format parameters.
  23. *
  24. * @return The number of characters actually written to buffer.
  25. */
  26. int rt_snprintf(char *buf, rt_size_t size, const char *fmt, ...)
  27. {
  28. rt_int32_t n = 0;
  29. va_list args;
  30. va_start(args, fmt);
  31. n = rt_vsnprintf(buf, size, fmt, args);
  32. va_end(args);
  33. return n;
  34. }
  35. RTM_EXPORT(rt_snprintf);
  36. /**
  37. * @brief This function will fill a formatted string to buffer.
  38. *
  39. * @param buf is the buffer to save formatted string.
  40. *
  41. * @param format is the format parameters.
  42. *
  43. * @param arg_ptr is a list of variable parameters.
  44. *
  45. * @return The number of characters actually written to buffer.
  46. */
  47. int rt_vsprintf(char *buf, const char *format, va_list arg_ptr)
  48. {
  49. return rt_vsnprintf(buf, (rt_size_t) - 1, format, arg_ptr);
  50. }
  51. RTM_EXPORT(rt_vsprintf);
  52. /**
  53. * @brief This function will fill a formatted string to buffer
  54. *
  55. * @param buf the buffer to save formatted string.
  56. *
  57. * @param format is the format parameters.
  58. *
  59. * @return The number of characters actually written to buffer.
  60. */
  61. int rt_sprintf(char *buf, const char *format, ...)
  62. {
  63. rt_int32_t n = 0;
  64. va_list arg_ptr;
  65. va_start(arg_ptr, format);
  66. n = rt_vsprintf(buf, format, arg_ptr);
  67. va_end(arg_ptr);
  68. return n;
  69. }
  70. RTM_EXPORT(rt_sprintf);
  71. #ifdef RT_KLIBC_USING_LIBC_VSNPRINTF
  72. int rt_vsnprintf(char *buf, rt_size_t size, const char *fmt, va_list args)
  73. {
  74. return vsnprintf(buf, size, fmt, args);
  75. }
  76. #endif /* RT_KLIBC_USING_LIBC_VSNPRINTF */
  77. RTM_EXPORT(rt_vsnprintf);
  78. #ifdef RT_KLIBC_USING_LIBC_VSSCANF
  79. int rt_vsscanf(const char *buffer, const char *format, va_list ap)
  80. {
  81. return vsscanf(buffer, format, ap);
  82. }
  83. #endif /* RT_KLIBC_USING_LIBC_VSSCANF */
  84. RTM_EXPORT(rt_vsscanf);
  85. /**
  86. * @brief This function parses a formatted string from the input string.
  87. *
  88. * @param str the input string to be parsed.
  89. *
  90. * @param format the format string that specifies how to interpret the input.
  91. *
  92. * @return The number of input items successfully matched and assigned.
  93. */
  94. int rt_sscanf(const char *str, const char *format, ...)
  95. {
  96. va_list ap;
  97. int rv;
  98. va_start(ap, format);
  99. rv = rt_vsscanf(str, format, ap);
  100. va_end(ap);
  101. return rv;
  102. }
  103. RTM_EXPORT(rt_sscanf);