diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-02-07 12:29:30 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-02-13 09:22:33 +0100 |
commit | c429c6841621a9272f92b35d401419806c4727f4 (patch) | |
tree | 6eb518a00820d5e8a8d1d8d86e2746a2dfe969c6 /common/console_common.c | |
parent | 2ccd4510bd74d01ad20b276f0e2e51ced0c475a8 (diff) | |
download | barebox-c429c6841621a9272f92b35d401419806c4727f4.tar.gz barebox-c429c6841621a9272f92b35d401419806c4727f4.tar.xz |
console: consolidate common console code
The different console implementations share a good amount of code,
share this in console_common.c.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'common/console_common.c')
-rw-r--r-- | common/console_common.c | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/common/console_common.c b/common/console_common.c new file mode 100644 index 0000000000..d139d1a8fe --- /dev/null +++ b/common/console_common.c @@ -0,0 +1,110 @@ +/* + * based on code: + * + * (C) Copyright 2000 Paolo Scaffardi, AIRVENT SAM s.p.a - + * RIMINI(ITALY), arsenio@tin.it + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ +#include <common.h> +#include <fs.h> +#include <errno.h> + +#ifndef CONFIG_CONSOLE_NONE + +int printf(const char *fmt, ...) +{ + va_list args; + uint i; + char printbuffer[CFG_PBSIZE]; + + va_start(args, fmt); + + /* + * For this to work, printbuffer must be larger than + * anything we ever want to print. + */ + i = vsprintf (printbuffer, fmt, args); + va_end(args); + + /* Print the string */ + puts(printbuffer); + + return i; +} +EXPORT_SYMBOL(printf); + +int vprintf(const char *fmt, va_list args) +{ + uint i; + char printbuffer[CFG_PBSIZE]; + + /* + * For this to work, printbuffer must be larger than + * anything we ever want to print. + */ + i = vsprintf(printbuffer, fmt, args); + + /* Print the string */ + puts(printbuffer); + + return i; +} +EXPORT_SYMBOL(vprintf); + +#endif /* !CONFIG_CONSOLE_NONE */ + +int fprintf(int file, const char *fmt, ...) +{ + va_list args; + char printbuffer[CFG_PBSIZE]; + + va_start(args, fmt); + + /* + * For this to work, printbuffer must be larger than + * anything we ever want to print. + */ + vsprintf(printbuffer, fmt, args); + va_end(args); + + /* Print the string */ + return fputs(file, printbuffer); +} +EXPORT_SYMBOL(fprintf); + +int fputs(int fd, const char *s) +{ + if (fd == 1) + return puts(s); + else if (fd == 2) + return eputs(s); + else + return write(fd, s, strlen(s)); +} +EXPORT_SYMBOL(fputs); + +int fputc(int fd, char c) +{ + if (fd == 1) + putchar(c); + else if (fd == 2) + eputc(c); + else + return write(fd, &c, 1); + + return 0; +} +EXPORT_SYMBOL(fputc); |