[rtems commit] posix: Use function instead of macros

Sebastian Huber sebh at rtems.org
Wed Oct 8 09:17:50 UTC 2014


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

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Wed Oct  8 10:07:01 2014 +0200

posix: Use function instead of macros

---

 cpukit/posix/src/mutexget.c |   69 +++++++++++++++++-------------------------
 1 files changed, 28 insertions(+), 41 deletions(-)

diff --git a/cpukit/posix/src/mutexget.c b/cpukit/posix/src/mutexget.c
index 792ffdb..f683137 100644
--- a/cpukit/posix/src/mutexget.c
+++ b/cpukit/posix/src/mutexget.c
@@ -18,55 +18,42 @@
 #include "config.h"
 #endif
 
-#include <errno.h>
-#include <pthread.h>
-
-#include <rtems/system.h>
-#include <rtems/score/coremuteximpl.h>
 #include <rtems/posix/muteximpl.h>
 
+static bool _POSIX_Mutex_Check_id_and_auto_init(
+  pthread_mutex_t   *mutex,
+  Objects_Locations *location
+)
+{
+  if ( mutex == NULL ) {
+    *location = OBJECTS_ERROR;
 
-/*
- *  _POSIX_Mutex_Get_support
- *
- *  NOTE: The support macro makes it possible for both to use exactly
- *        the same code to check for NULL id pointer and
- *        PTHREAD_MUTEX_INITIALIZER without adding overhead.
- */
+    return false;
+  }
+
+  if ( *mutex == PTHREAD_MUTEX_INITIALIZER ) {
+    int eno;
 
-#define ___POSIX_Mutex_Get_support_error_check( _id, _location ) \
-  do { \
-    if ( !_id ) { \
-      *_location = OBJECTS_ERROR; \
-      return (POSIX_Mutex_Control *) 0; \
-    }  \
-  } while (0)
+    eno = pthread_mutex_init( mutex, NULL );
 
-#define ___POSIX_Mutex_Get_support_auto_initialization( _id, _location ) \
-  do { \
-    int _status; \
-    \
-    if ( *_id == PTHREAD_MUTEX_INITIALIZER ) { \
-      /* \
-       *  Do an "auto-create" here. \
-       */ \
-      \
-      _status = pthread_mutex_init( (pthread_mutex_t *)_id, 0 ); \
-      if ( _status ) { \
-        *_location = OBJECTS_ERROR;  \
-        return (POSIX_Mutex_Control *) 0; \
-      } \
-    } \
-  } while (0)
+    if ( eno != 0 ) {
+      *location = OBJECTS_ERROR;
+
+      return false;
+    }
+  }
+
+  return true;
+}
 
 POSIX_Mutex_Control *_POSIX_Mutex_Get (
   pthread_mutex_t   *mutex,
   Objects_Locations *location
 )
 {
-  ___POSIX_Mutex_Get_support_error_check( mutex, location );
-
-  ___POSIX_Mutex_Get_support_auto_initialization( mutex, location );
+  if ( !_POSIX_Mutex_Check_id_and_auto_init( mutex, location ) ) {
+    return NULL;
+  }
 
   return (POSIX_Mutex_Control *)
     _Objects_Get( &_POSIX_Mutex_Information, (Objects_Id) *mutex, location );
@@ -78,9 +65,9 @@ POSIX_Mutex_Control *_POSIX_Mutex_Get_interrupt_disable (
   ISR_Level         *level
 )
 {
-  ___POSIX_Mutex_Get_support_error_check( mutex, location );
-
-  ___POSIX_Mutex_Get_support_auto_initialization( mutex, location );
+  if ( !_POSIX_Mutex_Check_id_and_auto_init( mutex, location ) ) {
+    return NULL;
+  }
 
   return (POSIX_Mutex_Control *) _Objects_Get_isr_disable(
     &_POSIX_Mutex_Information,



More information about the vc mailing list