[rtems commit] libcsupport: Refactor rtems_deviceio_errno

Joel Sherrill joel at rtems.org
Wed Jan 8 21:25:41 UTC 2014


Module:    rtems
Branch:    master
Commit:    35b8f48a4b18a605945f149601a8ff8c9bc11fd6
Changeset: http://git.rtems.org/rtems/commit/?id=35b8f48a4b18a605945f149601a8ff8c9bc11fd6

Author:    Daniel Ramirez <javamonn at gmail.com>
Date:      Fri Dec  6 12:21:20 2013 -0600

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(-)

diff --git a/cpukit/libcsupport/Makefile.am b/cpukit/libcsupport/Makefile.am
index 61c17e9..0d7597d 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 571b3e1..351612a 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 b03b323..0000000
--- 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 67e0353..6407e63 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 2761791..8904288 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 1d8c4fa..33048c0 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;
+  }
+}




More information about the vc mailing list