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