aboutsummaryrefslogtreecommitdiff
path: root/apps/systemlib/err.c
diff options
context:
space:
mode:
authorpx4dev <px4@purgatory.org>2012-08-18 22:24:58 -0700
committerpx4dev <px4@purgatory.org>2012-08-18 22:24:58 -0700
commitfcad5b52c52484470c897cdde745e62008c61e7d (patch)
tree9579a8eccabe738f3231c5c857cea956358d189a /apps/systemlib/err.c
parent99515fc1ddcd57c6ab60c34c73b1deae549f357c (diff)
downloadpx4-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.c28
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