summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/src/status.c
diff options
context:
space:
mode:
authorDaniel Ramirez <javamonn@gmail.com>2013-12-06 12:21:20 -0600
committerJoel Sherrill <joel.sherrill@oarcorp.com>2014-01-08 15:24:09 -0600
commit35b8f48a4b18a605945f149601a8ff8c9bc11fd6 (patch)
tree305db372660ba0f2ab7c267ac30143006ec5bc2d /cpukit/rtems/src/status.c
parentpowerpc/mvme3100: Improve Doxygen (diff)
downloadrtems-35b8f48a4b18a605945f149601a8ff8c9bc11fd6.tar.bz2
libcsupport: Refactor rtems_deviceio_errno
Renames rtems_deviceio_errno to rtems_status_code_to_errno and integrates it into the Classic API Status Handler. This function can now be called by including status.h
Diffstat (limited to 'cpukit/rtems/src/status.c')
-rw-r--r--cpukit/rtems/src/status.c54
1 files changed, 52 insertions, 2 deletions
diff --git a/cpukit/rtems/src/status.c b/cpukit/rtems/src/status.c
index 1d8c4fafcc..33048c01b2 100644
--- a/cpukit/rtems/src/status.c
+++ b/cpukit/rtems/src/status.c
@@ -1,11 +1,11 @@
/**
* @file
*
- * @brief Status Object Name Errors to Status Array
+ * @brief Status Mapping Arrays
* @ingroup ClassicStatus
*/
-/* COPYRIGHT (c) 1989-2008.
+/* COPYRIGHT (c) 1989-2013.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
@@ -14,6 +14,7 @@
*/
#include <rtems/rtems/statusimpl.h>
+#include <errno.h>
const rtems_status_code _Status_Object_name_errors_to_status[] = {
/** This maps OBJECTS_SUCCESSFUL to RTEMS_SUCCESSFUL. */
@@ -27,3 +28,52 @@ const rtems_status_code _Status_Object_name_errors_to_status[] = {
/** This maps OBJECTS_INVALID_NODE to RTEMS_INVALID_NODE. */
RTEMS_INVALID_NODE
};
+
+static const int status_code_to_errno [RTEMS_STATUS_CODES_LAST + 1] = {
+ [RTEMS_SUCCESSFUL] = 0,
+ [RTEMS_TASK_EXITTED] = EIO,
+ [RTEMS_MP_NOT_CONFIGURED] = EIO,
+ [RTEMS_INVALID_NAME] = EINVAL,
+ [RTEMS_INVALID_ID] = EIO,
+ [RTEMS_TOO_MANY] = EIO,
+ [RTEMS_TIMEOUT] = ETIMEDOUT,
+ [RTEMS_OBJECT_WAS_DELETED] = EIO,
+ [RTEMS_INVALID_SIZE] = EIO,
+ [RTEMS_INVALID_ADDRESS] = EIO,
+ [RTEMS_INVALID_NUMBER] = EBADF,
+ [RTEMS_NOT_DEFINED] = EIO,
+ [RTEMS_RESOURCE_IN_USE] = EBUSY,
+ [RTEMS_UNSATISFIED] = ENODEV,
+ [RTEMS_INCORRECT_STATE] = EIO,
+ [RTEMS_ALREADY_SUSPENDED] = EIO,
+ [RTEMS_ILLEGAL_ON_SELF] = EIO,
+ [RTEMS_ILLEGAL_ON_REMOTE_OBJECT] = EIO,
+ [RTEMS_CALLED_FROM_ISR] = EIO,
+ [RTEMS_INVALID_PRIORITY] = EIO,
+ [RTEMS_INVALID_CLOCK] = EINVAL,
+ [RTEMS_INVALID_NODE] = EINVAL,
+ [RTEMS_NOT_CONFIGURED] = ENOSYS,
+ [RTEMS_NOT_OWNER_OF_RESOURCE] = EPERM,
+ [RTEMS_NOT_IMPLEMENTED] = ENOSYS,
+ [RTEMS_INTERNAL_ERROR] = EIO,
+ [RTEMS_NO_MEMORY] = ENOMEM,
+ [RTEMS_IO_ERROR] = EIO,
+ [RTEMS_PROXY_BLOCKING] = EIO
+};
+
+int rtems_status_code_to_errno(rtems_status_code sc)
+{
+ if (sc == RTEMS_SUCCESSFUL) {
+ return 0;
+ } else {
+ int eno = EINVAL;
+
+ if ((unsigned) sc <= RTEMS_STATUS_CODES_LAST) {
+ eno = status_code_to_errno [sc];
+ }
+
+ errno = eno;
+
+ return -1;
+ }
+}