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