On Thu, Jun 14, 2018 at 09:11:22PM -0700, Andrey Smirnov wrote: > Consolidate code doing '\n' -> '\n\r' compensation in DEBUG_LL and > CONSOLE_* subsystems. While at it move it from puts_ll() to putc_ll() > in order to match the semantics of other puts()/putc() > implementations. > > This is done as a macro in order to avoid putting any restrictions on > the signature of __putc. > > Signed-off-by: Andrey Smirnov <andrew.smirnov@xxxxxxxxx> > --- > include/debug_ll.h | 38 ++++++++++++++++++++++++++++++++------ > lib/console.c | 17 +++++++---------- > 2 files changed, 39 insertions(+), 16 deletions(-) > > diff --git a/include/debug_ll.h b/include/debug_ll.h > index 504751639..4032ced95 100644 > --- a/include/debug_ll.h > +++ b/include/debug_ll.h > @@ -31,9 +31,32 @@ > #include <mach/debug_ll.h> > #endif > > +/** > + * __do_putc - Macro implementing '\n'-> '\n\r' substituting putc() > + * > + * @__putc: Single argument or a macro that implements plain putc() > + * @__c: Character to print > + * > + * Internal macro used to implement putc_ll() and __console_putc() and > + * intended to be the only place where '\n' -> '\n\r' substitution is > + * codified > + */ > +#define __do_putc(__putc, ___c) \ > + ({ \ > + typeof(___c) __c = (___c); \ > + int __n = 1; \ > + \ > + __putc(__c); \ > + if (__c == '\n') { \ > + __putc('\r'); \ > + __n = 2; \ > + } \ > + __n; \ > + }) > + > #if defined (CONFIG_DEBUG_LL) > ... > +/* > + * __do_putc expects a macro or a function of a single argument so we > + * create this dummy adapter to work around that > + */ > +#define __CDEV_PUTC(__c) __cdev_putc(cdev, __c) > + > + return __do_putc(__CDEV_PUTC, c); > } Creating a macro for the "\n" -> "\r\n" conversion doesn't look like an improvement to me, especially when another macro is necessary to make the first one usable. Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox