fmt.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /*
  2. * Copyright (c) 2010-2017 Richard Braun.
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation, either version 3 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. *
  17. * Upstream site with license notes :
  18. * http://git.sceen.net/rbraun/librbraun.git/
  19. *
  20. *
  21. * Formatted string functions.
  22. *
  23. * The functions provided by this module implement a subset of the standard
  24. * sprintf- and sscanf-like functions.
  25. *
  26. * sprintf:
  27. * - flags: # 0 - ' ' (space) +
  28. * - field width is supported
  29. * - precision is supported
  30. *
  31. * sscanf:
  32. * - flags: *
  33. * - field width is supported
  34. *
  35. * common:
  36. * - modifiers: hh h l ll z t
  37. * - specifiers: d i o u x X c s p n %
  38. */
  39. #ifndef KERN_FMT_H
  40. #define KERN_FMT_H
  41. #include <stdarg.h>
  42. #include <stddef.h>
  43. struct fmt_write_op {
  44. void *data;
  45. void (*putc)(void *data, int ch);
  46. };
  47. struct fmt_read_op {
  48. void *data;
  49. int (*getc)(void *data);
  50. };
  51. int fmt_xprintf(struct fmt_write_op *op, const char *format, ...)
  52. __attribute__((format(printf, 2, 3)));
  53. int fmt_vxprintf(struct fmt_write_op *op, const char *format, va_list ap)
  54. __attribute__((format(printf, 2, 0)));
  55. int fmt_sprintf(char *str, const char *format, ...)
  56. __attribute__((format(printf, 2, 3)));
  57. int fmt_vsprintf(char *str, const char *format, va_list ap)
  58. __attribute__((format(printf, 2, 0)));
  59. int fmt_snprintf(char *str, size_t size, const char *format, ...)
  60. __attribute__((format(printf, 3, 4)));
  61. int fmt_vsnprintf(char *str, size_t size, const char *format, va_list ap)
  62. __attribute__((format(printf, 3, 0)));
  63. int fmt_xscanf(struct fmt_read_op *op, const char *format, ...)
  64. __attribute__((format(printf, 2, 3)));
  65. int fmt_vxscanf(struct fmt_read_op *op, const char *format, va_list ap)
  66. __attribute__((format(printf, 2, 0)));
  67. int fmt_sscanf(const char *str, const char *format, ...)
  68. __attribute__((format(scanf, 2, 3)));
  69. int fmt_vsscanf(const char *str, const char *format, va_list ap)
  70. __attribute__((format(scanf, 2, 0)));
  71. #endif /* KERN_FMT_H */