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