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