aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Nieder <jrnieder@gmail.com>2011-07-07 15:20:29 +0800
committermaximilian attems <max@stro.at>2012-07-02 10:43:24 +0200
commit8ce54e2a6adb82cbbb988e1f335fa5ebf370f6c5 (patch)
treebf97fa67e54f7ee37dbd3a935a64bfb486c7e26f
parent4467d6e5caa5c97023c824114cf76c7d862340e5 (diff)
downloadklibc-8ce54e2a6adb82cbbb988e1f335fa5ebf370f6c5.tar.gz
[klibc] [OUTPUT] Make outc an inline function
As "gcc -pedantic" warns, ISO C forbids conditional expressions with only one void side. So the (needslow ? slowpath() : fastpath) code for outc in the !USE_GLIBC_STDIO case might not be portable. More importantly, it's hard to read. Rip it out and replace it with an inline function which should generate the same code. Reported-by: Szabolcs Nagy <nsz@port70.net> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: maximilian attems <max@stro.at>
-rw-r--r--usr/dash/output.h15
1 files changed, 13 insertions, 2 deletions
diff --git a/usr/dash/output.h b/usr/dash/output.h
index d123301b5e4d6..f853e9df65c12 100644
--- a/usr/dash/output.h
+++ b/usr/dash/output.h
@@ -97,10 +97,21 @@ freestdout()
#define OUTPUT_ERR 01 /* error occurred on output */
#ifdef USE_GLIBC_STDIO
-#define outc(c, o) putc((c), (o)->stream)
+static inline void outc(int ch, struct output *file)
+{
+ putc(ch, file->stream);
+}
#define doformat(d, f, a) vfprintf((d)->stream, (f), (a))
#else
-#define outc(c, file) ((file)->nextc == (file)->end ? outcslow((c), (file)) : (*(file)->nextc = (c), (file)->nextc++))
+static inline void outc(int ch, struct output *file)
+{
+ if (file->nextc == file->end)
+ outcslow(ch, file);
+ else {
+ *file->nextc = ch;
+ file->nextc++;
+ }
+}
#endif
#define out1c(c) outc((c), out1)
#define out2c(c) outcslow((c), out2)