summaryrefslogtreecommitdiffstats
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
parenta77c3719f83940a026b23ad601b175069dd0420f (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
-rw-r--r--cpukit/libcsupport/Makefile.am1
-rw-r--r--cpukit/libcsupport/include/rtems/deviceio.h2
-rw-r--r--cpukit/libcsupport/src/sup_fs_deviceerrno.c75
-rw-r--r--cpukit/libcsupport/src/sup_fs_deviceio.c13
-rw-r--r--cpukit/rtems/include/rtems/rtems/status.h24
-rw-r--r--cpukit/rtems/src/status.c54
6 files changed, 83 insertions, 86 deletions
diff --git a/cpukit/libcsupport/Makefile.am b/cpukit/libcsupport/Makefile.am
index 61c17e994b..0d7597d666 100644
--- a/cpukit/libcsupport/Makefile.am
+++ b/cpukit/libcsupport/Makefile.am
@@ -136,7 +136,6 @@ libcsupport_a_SOURCES = src/gxx_wrappers.c src/getchark.c src/printk.c \
src/sup_fs_mount_iterate.c \
src/sup_fs_node_type.c \
src/sup_fs_deviceio.c \
- src/sup_fs_deviceerrno.c \
src/clonenode.c \
src/freenode.c \
src/resource_snapshot.c \
diff --git a/cpukit/libcsupport/include/rtems/deviceio.h b/cpukit/libcsupport/include/rtems/deviceio.h
index 571b3e14ec..351612a442 100644
--- a/cpukit/libcsupport/include/rtems/deviceio.h
+++ b/cpukit/libcsupport/include/rtems/deviceio.h
@@ -39,8 +39,6 @@ extern "C" {
* This file contains the set of handlers used to map operations on
* IMFS device nodes onto calls to the RTEMS Classic API IO Manager.
*/
-int rtems_deviceio_errno( rtems_status_code status );
-
int rtems_deviceio_open(
rtems_libio_t *iop,
const char *path,
diff --git a/cpukit/libcsupport/src/sup_fs_deviceerrno.c b/cpukit/libcsupport/src/sup_fs_deviceerrno.c
deleted file mode 100644
index b03b32329a..0000000000
--- a/cpukit/libcsupport/src/sup_fs_deviceerrno.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * @file
- *
- * @brief IMFS Device Node Handlers
- * @ingroup Device IO Handler
- *
- * This file contains the set of handlers used to map operations on
- * IMFS device nodes onto calls to the RTEMS Classic API IO Manager.
- */
-
-/*
- * COPYRIGHT (c) 1989-2008.
- * On-Line Applications Research Corporation (OAR).
- *
- * 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.
- */
-
-#if HAVE_CONFIG_H
- #include "config.h"
-#endif
-
-#include <rtems/deviceio.h>
-
-#include <errno.h>
-
-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_deviceio_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;
- }
-}
diff --git a/cpukit/libcsupport/src/sup_fs_deviceio.c b/cpukit/libcsupport/src/sup_fs_deviceio.c
index 67e035301a..6407e637fc 100644
--- a/cpukit/libcsupport/src/sup_fs_deviceio.c
+++ b/cpukit/libcsupport/src/sup_fs_deviceio.c
@@ -6,7 +6,7 @@
*/
/*
- * COPYRIGHT (c) 1989-2012.
+ * COPYRIGHT (c) 1989-2013.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
@@ -19,6 +19,7 @@
#endif
#include <rtems/deviceio.h>
+#include <rtems/rtems/status.h>
int rtems_deviceio_open(
rtems_libio_t *iop,
@@ -38,7 +39,7 @@ int rtems_deviceio_open(
status = rtems_io_open( major, minor, &args );
- return rtems_deviceio_errno( status );
+ return rtems_status_code_to_errno( status );
}
int rtems_deviceio_close(
@@ -56,7 +57,7 @@ int rtems_deviceio_close(
status = rtems_io_close( major, minor, &args );
- return rtems_deviceio_errno( status );
+ return rtems_status_code_to_errno( status );
}
ssize_t rtems_deviceio_read(
@@ -83,7 +84,7 @@ ssize_t rtems_deviceio_read(
return (ssize_t) args.bytes_moved;
} else {
- return rtems_deviceio_errno( status );
+ return rtems_status_code_to_errno( status );
}
}
@@ -111,7 +112,7 @@ ssize_t rtems_deviceio_write(
return (ssize_t) args.bytes_moved;
} else {
- return rtems_deviceio_errno( status );
+ return rtems_status_code_to_errno( status );
}
}
@@ -134,6 +135,6 @@ int rtems_deviceio_control(
if ( status == RTEMS_SUCCESSFUL ) {
return args.ioctl_return;
} else {
- return rtems_deviceio_errno(status);
+ return rtems_status_code_to_errno(status);
}
}
diff --git a/cpukit/rtems/include/rtems/rtems/status.h b/cpukit/rtems/include/rtems/rtems/status.h
index 2761791478..89042883fb 100644
--- a/cpukit/rtems/include/rtems/rtems/status.h
+++ b/cpukit/rtems/include/rtems/rtems/status.h
@@ -217,6 +217,30 @@ RTEMS_INLINE_ROUTINE bool rtems_are_statuses_equal(
return (code1 == code2);
}
+/**
+ * @brief RTEMS Status Code to Errno Mapping Function
+ *
+ * This function recieves an RTEMS status code and returns an
+ * errno error code. The retval values show the mappings between
+ * rtems_status_codes and errno error codes.
+ *
+ * @retval 0 RTEMS_SUCCESSFUL
+ * @retval EIO RTEMS_TASK_EXITED, RTEMS_MP_NOT_CONFIGURED, RTEMS_INVALID_ID,
+ * RTEMS_TOO_MANY, RTEMS_OBJECT_WAS_DELETED, RTEMS_INVALID_SIZE,
+ * RTEMS_INVALID_ADDRESS, RTEMS_NOT_DEFINED, RTEMS_INCORRECT_STATE,
+ * RTEMS_ILLEGAL_ON_SELF, RTEMS_ILLEGAL_ON_REMOTE_OBJECT,
+ * RTEMS_CALLED_FROM_ISR, RTEMS_INVALID_PRIORITY, RTEMS_INTERNAL_ERROR,
+ * RTEMS_IO_ERROR, RTEMS_PROXY_BLOCKING
+ * @retval EINVAL RTEMS_INVALID_NAME, RTEMS_INVALID_CLOCK, RTEMS_INVALID_NODE
+ * @retval ETIMEDOUT RTEMS_TIMEOUT
+ * @retval EBADF RTEMS_INVALID_NUMBER
+ * @retval EBUSY RTEMS_RESOURCE_IN_USE
+ * @retval ENODEV RTEMS_UNSATISFIED
+ * @retval ENOSYS RTEMS_NOT_IMPLEMENTED, RTEMS_NOT_CONFIGURED
+ * @retval ENOMEM RTEMS_NO_MEMORY
+ */
+int rtems_status_code_to_errno(rtems_status_code sc);
+
/**@}*/
#ifdef __cplusplus
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;
+ }
+}