[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