From 419accf6a69a1d604ede93e8b9825e484d93dd70 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 8 Oct 2014 10:07:01 +0200 Subject: posix: Use function instead of macros --- cpukit/posix/src/mutexget.c | 69 ++++++++++++++++++--------------------------- 1 file 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 -#include - -#include -#include #include +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, -- cgit v1.2.3