summaryrefslogtreecommitdiffstats
path: root/cpukit/libdl/rtl-error.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libdl/rtl-error.c')
-rw-r--r--cpukit/libdl/rtl-error.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/cpukit/libdl/rtl-error.c b/cpukit/libdl/rtl-error.c
new file mode 100644
index 0000000000..bc2e3e425c
--- /dev/null
+++ b/cpukit/libdl/rtl-error.c
@@ -0,0 +1,47 @@
+/*
+ * COPYRIGHT (c) 2012 Chris Johns <chrisj@rtems.org>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+/**
+ * @file
+ *
+ * @ingroup rtl
+ *
+ * @brief RTEMS Run-Time Linker Error
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <stdarg.h>
+
+#include <rtems/rtl/rtl.h>
+#include "rtl-error.h"
+
+void
+rtems_rtl_set_error (int error, const char* format, ...)
+{
+ rtems_rtl_data_t* rtl = rtems_rtl_lock ();
+ va_list ap;
+ va_start (ap, format);
+ rtl->last_errno = error;
+ vsnprintf (rtl->last_error, sizeof (rtl->last_error), format, ap);
+ rtems_rtl_unlock ();
+ va_end (ap);
+}
+
+int
+rtems_rtl_get_error (char* message, size_t max_message)
+{
+ rtems_rtl_data_t* rtl = rtems_rtl_lock ();
+ int last_errno = rtl->last_errno;
+ strncpy (message, rtl->last_error, sizeof (rtl->last_error));
+ rtems_rtl_unlock ();
+ return last_errno;
+}
+