diff options
Diffstat (limited to '')
-rw-r--r-- | cpukit/libdl/dlfcn.c | 2 | ||||
-rw-r--r-- | cpukit/libdl/rtl-error.c | 12 | ||||
-rw-r--r-- | cpukit/libdl/rtl-error.h | 5 |
3 files changed, 19 insertions, 0 deletions
diff --git a/cpukit/libdl/dlfcn.c b/cpukit/libdl/dlfcn.c index 3b31bb2e8e..4277caf757 100644 --- a/cpukit/libdl/dlfcn.c +++ b/cpukit/libdl/dlfcn.c @@ -18,6 +18,7 @@ #include <stdint.h> #include <dlfcn.h> #include <rtems/rtl/rtl.h> +#include "rtl-error.h" static rtems_rtl_obj_t* dl_get_obj_from_handle (void* handle) @@ -130,6 +131,7 @@ dlerror (void) { static char msg[64]; rtems_rtl_get_error (msg, sizeof (msg)); + rtems_rtl_clear_error (); return msg; } diff --git a/cpukit/libdl/rtl-error.c b/cpukit/libdl/rtl-error.c index 5ec4b26ef7..a60074fcd0 100644 --- a/cpukit/libdl/rtl-error.c +++ b/cpukit/libdl/rtl-error.c @@ -52,3 +52,15 @@ rtems_rtl_get_error (char* message, size_t max_message) return EIO; } + +void +rtems_rtl_clear_error (void) +{ + rtems_rtl_data_t* rtl = rtems_rtl_lock (); + if (rtl != NULL) + { + rtl->last_errno = 0; + rtl->last_error[0] = '\0'; + rtems_rtl_unlock (); + } +} diff --git a/cpukit/libdl/rtl-error.h b/cpukit/libdl/rtl-error.h index 0badf51e21..f1cf4ea72c 100644 --- a/cpukit/libdl/rtl-error.h +++ b/cpukit/libdl/rtl-error.h @@ -37,6 +37,11 @@ extern "C" { */ void rtems_rtl_set_error (int error, const char* format, ...) RTEMS_RTL_PRINTF_ATTR; +/** + * Clears the error. + */ +void rtems_rtl_clear_error (void); + #ifdef __cplusplus } #endif /* __cplusplus */ |