summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-10-08 10:07:01 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-10-08 11:26:26 +0200
commit419accf6a69a1d604ede93e8b9825e484d93dd70 (patch)
treebb858135933e44bcd706cc51755c4a7c66b5e07e
parent044cf4d713f39c025c71bffa1eb879a9766f80a3 (diff)
downloadrtems-419accf6a69a1d604ede93e8b9825e484d93dd70.tar.bz2
posix: Use function instead of macros
-rw-r--r--cpukit/posix/src/mutexget.c69
1 files changed, 28 insertions, 41 deletions
diff --git a/cpukit/posix/src/mutexget.c b/cpukit/posix/src/mutexget.c
index 792ffdb64d..f683137655 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,