From 35b8f48a4b18a605945f149601a8ff8c9bc11fd6 Mon Sep 17 00:00:00 2001 From: Daniel Ramirez Date: Fri, 6 Dec 2013 12:21:20 -0600 Subject: 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 --- cpukit/libcsupport/Makefile.am | 1 - cpukit/libcsupport/include/rtems/deviceio.h | 2 - cpukit/libcsupport/src/sup_fs_deviceerrno.c | 75 ----------------------------- cpukit/libcsupport/src/sup_fs_deviceio.c | 13 ++--- cpukit/rtems/include/rtems/rtems/status.h | 24 +++++++++ cpukit/rtems/src/status.c | 54 ++++++++++++++++++++- 6 files changed, 83 insertions(+), 86 deletions(-) delete mode 100644 cpukit/libcsupport/src/sup_fs_deviceerrno.c 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 - -#include - -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 +#include 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 +#include 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; + } +} -- cgit v1.2.3