pseudo_sprintf.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Copyright 2022 Takeshi Ishii (@mtei)
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "pseudo_sprintf.h"
  4. static char *sprint_decimal(char *buf, int data) {
  5. if (data > 9) {
  6. buf = sprint_decimal(buf, data/10);
  7. }
  8. *buf++ = "0123456789"[data%10];
  9. *buf = '\0';
  10. return buf;
  11. }
  12. static char *sprint_hex(char *buf, uint32_t data) {
  13. if (data > 0xf) {
  14. buf = sprint_hex(buf, data/0x10);
  15. }
  16. *buf++ = "0123456789abcdef"[data & 0xf];
  17. *buf = '\0';
  18. return buf;
  19. }
  20. char *sprints(char *buf, char *src) {
  21. while (*src) {
  22. *buf++ = *src++;
  23. }
  24. *buf = '\0';
  25. return buf;
  26. }
  27. char *sprintx(char *buf, char *leadstr, uint32_t data) {
  28. buf = sprints(buf, leadstr);
  29. buf = sprint_hex(buf, data);
  30. return buf;
  31. }
  32. char *sprintd(char *buf, char *leadstr, int data) {
  33. buf = sprints(buf, leadstr);
  34. buf = sprint_decimal(buf, data);
  35. return buf;
  36. }
  37. char *sprint2d(char *buf, char *leadstr, int data) {
  38. buf = sprints(buf, leadstr);
  39. if (data > 99) {
  40. return sprint_decimal(buf, data);
  41. }
  42. if (data < 10) {
  43. *buf++ = ' ';
  44. }
  45. return sprint_decimal(buf, data);
  46. }