srm_printk.c 692 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * arch/alpha/lib/srm_printk.c
  4. */
  5. #include <linux/kernel.h>
  6. #include <asm/console.h>
  7. long
  8. srm_printk(const char *fmt, ...)
  9. {
  10. static char buf[1024];
  11. va_list args;
  12. long len, num_lf;
  13. char *src, *dst;
  14. va_start(args, fmt);
  15. len = vsprintf(buf, fmt, args);
  16. va_end(args);
  17. /* count number of linefeeds in string: */
  18. num_lf = 0;
  19. for (src = buf; *src; ++src) {
  20. if (*src == '\n') {
  21. ++num_lf;
  22. }
  23. }
  24. if (num_lf) {
  25. /* expand each linefeed into carriage-return/linefeed: */
  26. for (dst = src + num_lf; src >= buf; ) {
  27. if (*src == '\n') {
  28. *dst-- = '\r';
  29. }
  30. *dst-- = *src--;
  31. }
  32. }
  33. srm_puts(buf, num_lf+len);
  34. return len;
  35. }