From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pavel Machek Date: Wed, 15 Oct 2014 10:40:12 +0200 Subject: [U-Boot] puts() and newlines (was Re: Discussion topics / issues) In-Reply-To: <20141011150346.150C038352A@gemini.denx.de> References: <201410071445.50854.marex@denx.de> <20141010122229.B60DC38352B@gemini.denx.de> <5437E778.3050306@myspectrum.nl> <201410101626.41944.marex@denx.de> <543804AF.9050101@myspectrum.nl> <54384450.3000204@myspectrum.nl> <20141011150346.150C038352A@gemini.denx.de> Message-ID: <20141015084012.GA20015@amd> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi! > First, we have a compatibility problem here. GCC assumes that puts() > will add a newline character after the string; U-Boot puts() does NOT > do this. So the GCC auto-converted printf()s will all be wrong, as > they are missing the newline. [1] > [1] One might argue that this is a bug in U-Boot and should be fixed, > but that is another topic. I believe we should fix that, yes. I did quick grep, pavel at duo:~/wagabuibui/u-boot$ grep -ri puts . | wc -l 4287 and that is probably too much to change in one go. So what about this? Best regards, Pavel --- Introduce __puts() that puts strings without trailing newline. Plan is to move the existing puts() users into __puts(), when no puts() users are left, fix the puts() to add the newline, and move users that want newline back to puts(). Signed-off-by: Pavel Machek --- a/include/common.h +++ b/include/common.h @@ -836,6 +836,8 @@ int tstc(void); /* stdout */ void putc(const char c); void puts(const char *s); +static inline void __puts(const char *s) { puts(s); } + int printf(const char *fmt, ...) __attribute__ ((format (__printf__, 1, 2))); int vprintf(const char *fmt, va_list args); -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html