diff options
author | px4dev <px4@purgatory.org> | 2012-08-18 22:24:58 -0700 |
---|---|---|
committer | px4dev <px4@purgatory.org> | 2012-08-18 22:24:58 -0700 |
commit | fcad5b52c52484470c897cdde745e62008c61e7d (patch) | |
tree | 9579a8eccabe738f3231c5c857cea956358d189a /apps/systemlib/err.c | |
parent | 99515fc1ddcd57c6ab60c34c73b1deae549f357c (diff) | |
download | px4-firmware-fcad5b52c52484470c897cdde745e62008c61e7d.tar.gz px4-firmware-fcad5b52c52484470c897cdde745e62008c61e7d.tar.bz2 px4-firmware-fcad5b52c52484470c897cdde745e62008c61e7d.zip |
Teach err.c how to live without standard I/O
Diffstat (limited to 'apps/systemlib/err.c')
-rw-r--r-- | apps/systemlib/err.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/apps/systemlib/err.c b/apps/systemlib/err.c index 8f76aabe9..9692f03dd 100644 --- a/apps/systemlib/err.c +++ b/apps/systemlib/err.c @@ -38,7 +38,8 @@ * the same names. */ -#include <stdio.h> +#include <nuttx/config.h> + #include <stdlib.h> #include <errno.h> #include <string.h> @@ -47,17 +48,31 @@ #define NOCODE 1000 /* larger than maximum errno */ +#if CONFIG_NFILE_STREAMS > 0 +# include <stdio.h> +#elif defined(CONFIG_ARCH_LOWPUTC) +# include <debug.h> +extern int lib_lowvprintf(const char *fmt, va_list ap); +#else +# warning Cannot output without one of CONFIG_NFILE_STREAMS or CONFIG_ARCH_LOWPUTC +#endif + const char * getprogname(void) { +#if CONFIG_TASK_NAME_SIZE > 0 _TCB *thisproc = sched_self(); return thisproc->name; +#else + return "app"; +#endif } static void warnerr_core(int errcode, const char *fmt, va_list args) { +#if CONFIG_NFILE_STREAMS > 0 fprintf(stderr, "%s: ", getprogname()); vfprintf(stderr, fmt, args); @@ -67,6 +82,17 @@ warnerr_core(int errcode, const char *fmt, va_list args) if (errcode < NOCODE) fprintf(stderr, ": %s", strerror(errcode)); fprintf(stderr, "\n"); +#elif CONFIG_ARCH_LOWPUTC + lib_lowprintf("%s: ", getprogname()); + lib_lowvprintf(fmt, args); + + /* convenience as many parts of NuttX use negative errno */ + if (errcode < 0) + errcode = -errcode; + if (errcode < NOCODE) + lib_lowprintf(": %s", strerror(errcode)); + lib_lowprintf("\n"); +#endif } void |