From b98d399f3c4f7fc19a80a7f12503f0b4226c59dc Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 13 Dec 2011 12:56:53 +0000 Subject: 2011-12-13 Sebastian Huber * posix/src/mqueuenametoid.c, posix/src/semaphorenametoid.c: Removed files. * posix/src/psxnametoid.c: New file. * posix/Makefile.am: Reflect changes above. * posix/include/rtems/posix/config.h: Fixed integer types. * posix/include/rtems/posix/posixapi.h: Declare _POSIX_Name_to_id(). * posix/include/rtems/posix/mqueue.h, posix/inline/rtems/posix/mqueue.inl: Changed parameter of _POSIX_Message_queue_Create_support(). _POSIX_Message_queue_Name_to_id() is now inline. * posix/include/rtems/posix/semaphore.h, posix/inline/rtems/posix/semaphore.inl: Changed parameter of _POSIX_Semaphore_Create_support(). _POSIX_Semaphore_Name_to_id() is now inline. * posix/src/mqueuecreatesupp.c, posix/src/semaphorecreatesupp.c: Use _Workspace_String_duplicate(). * posix/src/mqueuesendsupp.c, posix/src/mqueueopen.c, posix/src/mqueueunlink.c, posix/src/seminit.c, posix/src/semopen.c, posix/src/semunlink.c: Update due to API changes. --- cpukit/ChangeLog | 22 +++++++++ cpukit/posix/Makefile.am | 5 +- cpukit/posix/include/rtems/posix/config.h | 26 +++++------ cpukit/posix/include/rtems/posix/mqueue.h | 18 ++----- cpukit/posix/include/rtems/posix/posixapi.h | 23 +++++++++ cpukit/posix/include/rtems/posix/semaphore.h | 15 +----- cpukit/posix/inline/rtems/posix/mqueue.inl | 16 ++++++- cpukit/posix/inline/rtems/posix/semaphore.inl | 12 +++++ cpukit/posix/src/mqueuecreatesupp.c | 21 ++++----- cpukit/posix/src/mqueuenametoid.c | 67 --------------------------- cpukit/posix/src/mqueueopen.c | 4 +- cpukit/posix/src/mqueuesendsupp.c | 4 +- cpukit/posix/src/mqueueunlink.c | 3 +- cpukit/posix/src/psxnametoid.c | 58 +++++++++++++++++++++++ cpukit/posix/src/semaphorecreatesupp.c | 32 ++++++++----- cpukit/posix/src/semaphorenametoid.c | 62 ------------------------- cpukit/posix/src/seminit.c | 1 + cpukit/posix/src/semopen.c | 14 +++--- cpukit/posix/src/semunlink.c | 5 +- 19 files changed, 196 insertions(+), 212 deletions(-) delete mode 100644 cpukit/posix/src/mqueuenametoid.c create mode 100644 cpukit/posix/src/psxnametoid.c delete mode 100644 cpukit/posix/src/semaphorenametoid.c diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index 6d68c6ed81..f44e7b7206 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,25 @@ +2011-12-13 Sebastian Huber + + * posix/src/mqueuenametoid.c, + posix/src/semaphorenametoid.c: Removed files. + * posix/src/psxnametoid.c: New file. + * posix/Makefile.am: Reflect changes above. + * posix/include/rtems/posix/config.h: Fixed integer types. + * posix/include/rtems/posix/posixapi.h: Declare _POSIX_Name_to_id(). + * posix/include/rtems/posix/mqueue.h, + posix/inline/rtems/posix/mqueue.inl: Changed parameter of + _POSIX_Message_queue_Create_support(). + _POSIX_Message_queue_Name_to_id() is now inline. + * posix/include/rtems/posix/semaphore.h, + posix/inline/rtems/posix/semaphore.inl: Changed parameter of + _POSIX_Semaphore_Create_support(). _POSIX_Semaphore_Name_to_id() is + now inline. + * posix/src/mqueuecreatesupp.c, posix/src/semaphorecreatesupp.c: Use + _Workspace_String_duplicate(). + * posix/src/mqueuesendsupp.c, posix/src/mqueueopen.c, + posix/src/mqueueunlink.c, posix/src/seminit.c, posix/src/semopen.c, + posix/src/semunlink.c: Update due to API changes. + 2011-12-13 Sebastian Huber * sapi/include/confdefs.h: Fixed workspace size estimate of POSIX keys diff --git a/cpukit/posix/Makefile.am b/cpukit/posix/Makefile.am index c6007c0042..d76fe8def6 100644 --- a/cpukit/posix/Makefile.am +++ b/cpukit/posix/Makefile.am @@ -106,7 +106,7 @@ libposix_a_SOURCES += src/mprotect.c ## MESSAGE_QUEUE_C_FILES libposix_a_SOURCES += src/mqueue.c src/mqueueclose.c \ src/mqueuecreatesupp.c src/mqueuedeletesupp.c src/mqueuegetattr.c \ - src/mqueuenametoid.c src/mqueuenotify.c src/mqueueopen.c \ + src/mqueuenotify.c src/mqueueopen.c \ src/mqueuereceive.c src/mqueuerecvsupp.c src/mqueuesend.c \ src/mqueuesendsupp.c src/mqueuesetattr.c src/mqueuetimedreceive.c \ src/mqueuetimedsend.c src/mqueuetranslatereturncode.c \ @@ -170,7 +170,7 @@ libposix_a_SOURCES += src/prwlock.c src/prwlockdestroy.c src/prwlockinit.c \ ## SEMAPHORE_C_FILES libposix_a_SOURCES += src/semaphore.c src/semaphorecreatesupp.c \ - src/semaphoredeletesupp.c src/semaphorenametoid.c \ + src/semaphoredeletesupp.c \ src/semaphoretranslatereturncode.c src/semaphorewaitsupp.c \ src/semclose.c src/semdestroy.c src/semgetvalue.c src/seminit.c \ src/semopen.c src/sempost.c src/semtimedwait.c src/semtrywait.c \ @@ -195,6 +195,7 @@ libposix_a_SOURCES += src/getitimer.c src/setitimer.c ## SUPPORT_C_FILES libposix_a_SOURCES += src/psxpriorityisvalid.c +libposix_a_SOURCES += src/psxnametoid.c EXTRA_DIST += src/README.mqueue diff --git a/cpukit/posix/include/rtems/posix/config.h b/cpukit/posix/include/rtems/posix/config.h index 053fa0290e..1af8639460 100644 --- a/cpukit/posix/include/rtems/posix/config.h +++ b/cpukit/posix/include/rtems/posix/config.h @@ -45,19 +45,19 @@ typedef struct { } posix_initialization_threads_table; typedef struct { - int maximum_threads; - int maximum_mutexes; - int maximum_condition_variables; - int maximum_keys; - int maximum_timers; - int maximum_queued_signals; - int maximum_message_queues; - int maximum_message_queue_descriptors; - int maximum_semaphores; - int maximum_barriers; - int maximum_rwlocks; - int maximum_spinlocks; - int number_of_initialization_threads; + uint32_t maximum_threads; + uint32_t maximum_mutexes; + uint32_t maximum_condition_variables; + uint32_t maximum_keys; + uint32_t maximum_timers; + uint32_t maximum_queued_signals; + uint32_t maximum_message_queues; + uint32_t maximum_message_queue_descriptors; + uint32_t maximum_semaphores; + uint32_t maximum_barriers; + uint32_t maximum_rwlocks; + uint32_t maximum_spinlocks; + uint32_t number_of_initialization_threads; posix_initialization_threads_table *User_initialization_threads_table; } posix_api_configuration_table; diff --git a/cpukit/posix/include/rtems/posix/mqueue.h b/cpukit/posix/include/rtems/posix/mqueue.h index 86a35cc77b..427564ba07 100644 --- a/cpukit/posix/include/rtems/posix/mqueue.h +++ b/cpukit/posix/include/rtems/posix/mqueue.h @@ -23,6 +23,7 @@ #include /* struct mq_attr */ #include #include +#include #ifdef __cplusplus extern "C" { @@ -79,6 +80,7 @@ void _POSIX_Message_queue_Manager_initialization(void); int _POSIX_Message_queue_Create_support( const char *name, + size_t name_len, int pshared, struct mq_attr *attr, POSIX_Message_queue_Control **message_queue @@ -126,7 +128,7 @@ int _POSIX_Message_queue_Send_support( mqd_t mqdes, const char *msg_ptr, size_t msg_len, - uint32_t msg_prio, + unsigned int msg_prio, bool wait, Watchdog_Interval timeout ); @@ -186,20 +188,6 @@ RTEMS_INLINE_ROUTINE bool _POSIX_Message_queue_Is_null ( POSIX_Message_queue_Control *the_mq ); -/* - * _POSIX_Message_queue_Name_to_id - * - * DESCRIPTION: - * - * This routine looks up the specified name for a message queue and returns the - * id of the message queue associated with it. - */ - -int _POSIX_Message_queue_Name_to_id( - const char *name, - Objects_Id *id -); - /* * _POSIX_Message_queue_Priority_to_core * diff --git a/cpukit/posix/include/rtems/posix/posixapi.h b/cpukit/posix/include/rtems/posix/posixapi.h index f90d4a76d2..b8de59b8fd 100644 --- a/cpukit/posix/include/rtems/posix/posixapi.h +++ b/cpukit/posix/include/rtems/posix/posixapi.h @@ -20,6 +20,7 @@ #define _RTEMS_POSIX_POSIXAPI_H #include +#include /** * @brief Initialize POSIX API @@ -29,5 +30,27 @@ */ void _POSIX_API_Initialize(void); +/** + * @brief Queries the object identifier @a id for a @a name. + * + * @param[in] information Object information. + * @param[in] name Zero terminated name string to look up. + * @param[out] id Pointer for identifier. The pointer must be valid. + * @param[out] len Pointer for string length. The pointer must be valid. + * + * @retval 0 Successful operation. + * @retval EINVAL The @a name pointer is @c NULL or the @a name string has + * zero length. + * @retval ENAMETOOLONG The @a name string length is greater than or equal to + * @c NAME_MAX. + * @retval ENOENT Found no corresponding identifier. + */ +int _POSIX_Name_to_id( + Objects_Information *information, + const char *name, + Objects_Id *id, + size_t *len +); + #endif /* end of include file */ diff --git a/cpukit/posix/include/rtems/posix/semaphore.h b/cpukit/posix/include/rtems/posix/semaphore.h index 3b96748aa7..89198ee1b4 100644 --- a/cpukit/posix/include/rtems/posix/semaphore.h +++ b/cpukit/posix/include/rtems/posix/semaphore.h @@ -25,6 +25,7 @@ extern "C" { #include #include +#include /* * Data Structure used to manage a POSIX semaphore @@ -129,6 +130,7 @@ RTEMS_INLINE_ROUTINE bool _POSIX_Semaphore_Is_null ( int _POSIX_Semaphore_Create_support( const char *name, + size_t name_len, int pshared, unsigned int value, POSIX_Semaphore_Control **the_sem @@ -161,19 +163,6 @@ int _POSIX_Semaphore_Wait_support( Watchdog_Interval timeout ); -/* - * _POSIX_Semaphore_Name_to_id - * - * DESCRIPTION: - * - * This routine performs name to id translation. - */ - -int _POSIX_Semaphore_Name_to_id( - const char *name, - sem_t *id -); - /* * _POSIX_Semaphore_Translate_core_semaphore_return_code * diff --git a/cpukit/posix/inline/rtems/posix/mqueue.inl b/cpukit/posix/inline/rtems/posix/mqueue.inl index cd0dd8b230..d64e7c35e6 100644 --- a/cpukit/posix/inline/rtems/posix/mqueue.inl +++ b/cpukit/posix/inline/rtems/posix/mqueue.inl @@ -127,7 +127,7 @@ RTEMS_INLINE_ROUTINE CORE_message_queue_Submit_types _POSIX_Message_queue_Priori unsigned int priority ) { - return priority * -1; + return (CORE_message_queue_Submit_types) priority * -1; } /* @@ -143,7 +143,19 @@ RTEMS_INLINE_ROUTINE unsigned int _POSIX_Message_queue_Priority_from_core( ) { /* absolute value without a library dependency */ - return ((priority >= 0) ? priority : -priority); + return (unsigned int) ((priority >= 0) ? priority : -priority); +} + +/** + * @see _POSIX_Name_to_id(). + */ +RTEMS_INLINE_ROUTINE int _POSIX_Message_queue_Name_to_id( + const char *name, + Objects_Id *id, + size_t *len +) +{ + return _POSIX_Name_to_id( &_POSIX_Message_queue_Information, name, id, len ); } #endif diff --git a/cpukit/posix/inline/rtems/posix/semaphore.inl b/cpukit/posix/inline/rtems/posix/semaphore.inl index ae1cd3a1fe..62256c072e 100644 --- a/cpukit/posix/inline/rtems/posix/semaphore.inl +++ b/cpukit/posix/inline/rtems/posix/semaphore.inl @@ -81,6 +81,18 @@ RTEMS_INLINE_ROUTINE bool _POSIX_Semaphore_Is_null ( return !the_semaphore; } +/** + * @see _POSIX_Name_to_id(). + */ +RTEMS_INLINE_ROUTINE int _POSIX_Semaphore_Name_to_id( + const char *name, + Objects_Id *id, + size_t *len +) +{ + return _POSIX_Name_to_id( &_POSIX_Semaphore_Information, name, id, len ); +} + #endif /* end of include file */ diff --git a/cpukit/posix/src/mqueuecreatesupp.c b/cpukit/posix/src/mqueuecreatesupp.c index bad22b536d..5941137d3e 100644 --- a/cpukit/posix/src/mqueuecreatesupp.c +++ b/cpukit/posix/src/mqueuecreatesupp.c @@ -42,9 +42,6 @@ #include #include -/* pure ANSI mode does not have this prototype */ -size_t strnlen(const char *, size_t); - /* * _POSIX_Message_queue_Create_support * @@ -54,6 +51,7 @@ size_t strnlen(const char *, size_t); int _POSIX_Message_queue_Create_support( const char *name_arg, + size_t name_len, int pshared, struct mq_attr *attr_ptr, POSIX_Message_queue_Control **message_queue @@ -63,9 +61,7 @@ int _POSIX_Message_queue_Create_support( CORE_message_queue_Attributes *the_mq_attr; struct mq_attr attr; char *name; - size_t n; - n = strnlen( name_arg, NAME_MAX ); /* length of name has already been validated */ _Thread_Disable_dispatch(); @@ -99,22 +95,21 @@ int _POSIX_Message_queue_Create_support( rtems_set_errno_and_return_minus_one( ENFILE ); } - the_mq->process_shared = pshared; - the_mq->named = true; - the_mq->open_count = 1; - the_mq->linked = true; - /* * Make a copy of the user's string for name just in case it was * dynamically constructed. */ - name = _Workspace_Allocate(n+1); - if (!name) { + name = _Workspace_String_duplicate( name_arg, name_len ); + if ( !name ) { _POSIX_Message_queue_Free( the_mq ); _Thread_Enable_dispatch(); rtems_set_errno_and_return_minus_one( ENOMEM ); } - strncpy( name, name_arg, n+1 ); + + the_mq->process_shared = pshared; + the_mq->named = true; + the_mq->open_count = 1; + the_mq->linked = true; /* * NOTE: That thread blocking discipline should be based on the diff --git a/cpukit/posix/src/mqueuenametoid.c b/cpukit/posix/src/mqueuenametoid.c deleted file mode 100644 index f52e3383c2..0000000000 --- a/cpukit/posix/src/mqueuenametoid.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * COPYRIGHT (c) 1989-2009. - * 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. - * - * $Id$ - */ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -/* pure ANSI mode does not have this prototype */ -size_t strnlen(const char *, size_t); - -/* - * _POSIX_Message_queue_Name_to_id - * - * Look up the specified name and attempt to locate the id - * for the associated message queue. - */ -int _POSIX_Message_queue_Name_to_id( - const char *name, - Objects_Id *id -) -{ - Objects_Name_or_id_lookup_errors status; - Objects_Id the_id; - - if ( !name ) - return EINVAL; - - if ( !name[0] ) - return EINVAL; - - if ( strnlen( name, NAME_MAX ) >= NAME_MAX ) - return ENAMETOOLONG; - - status = _Objects_Name_to_id_string( - &_POSIX_Message_queue_Information, - name, - &the_id - ); - *id = the_id; - - if ( status == OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL ) - return 0; - - return ENOENT; -} diff --git a/cpukit/posix/src/mqueueopen.c b/cpukit/posix/src/mqueueopen.c index 96ec4dd40f..b6c9e0dc19 100644 --- a/cpukit/posix/src/mqueueopen.c +++ b/cpukit/posix/src/mqueueopen.c @@ -58,6 +58,7 @@ mqd_t mq_open( POSIX_Message_queue_Control *the_mq; POSIX_Message_queue_Control_fd *the_mq_fd; Objects_Locations location; + size_t name_len; _Thread_Disable_dispatch(); @@ -75,7 +76,7 @@ mqd_t mq_open( } the_mq_fd->oflag = oflag; - status = _POSIX_Message_queue_Name_to_id( name, &the_mq_id ); + status = _POSIX_Message_queue_Name_to_id( name, &the_mq_id, &name_len ); /* * If the name to id translation worked, then the message queue exists @@ -128,6 +129,7 @@ mqd_t mq_open( */ status = _POSIX_Message_queue_Create_support( name, + name_len, true, /* shared across processes */ attr, &the_mq diff --git a/cpukit/posix/src/mqueuesendsupp.c b/cpukit/posix/src/mqueuesendsupp.c index 5fda0f1fe5..b04422dd2f 100644 --- a/cpukit/posix/src/mqueuesendsupp.c +++ b/cpukit/posix/src/mqueuesendsupp.c @@ -48,7 +48,7 @@ int _POSIX_Message_queue_Send_support( mqd_t mqdes, const char *msg_ptr, size_t msg_len, - uint32_t msg_prio, + unsigned int msg_prio, bool wait, Watchdog_Interval timeout ) @@ -91,7 +91,7 @@ int _POSIX_Message_queue_Send_support( */ msg_status = _CORE_message_queue_Submit( &the_mq->Message_queue, - (void *)msg_ptr, + msg_ptr, msg_len, mqdes, /* mqd_t is an object id */ NULL, diff --git a/cpukit/posix/src/mqueueunlink.c b/cpukit/posix/src/mqueueunlink.c index c3ce967606..eced328a69 100644 --- a/cpukit/posix/src/mqueueunlink.c +++ b/cpukit/posix/src/mqueueunlink.c @@ -51,10 +51,11 @@ int mq_unlink( int status; register POSIX_Message_queue_Control *the_mq; Objects_Id the_mq_id; + size_t name_len; _Thread_Disable_dispatch(); - status = _POSIX_Message_queue_Name_to_id( name, &the_mq_id ); + status = _POSIX_Message_queue_Name_to_id( name, &the_mq_id, &name_len ); if ( status != 0 ) { _Thread_Enable_dispatch(); rtems_set_errno_and_return_minus_one( status ); diff --git a/cpukit/posix/src/psxnametoid.c b/cpukit/posix/src/psxnametoid.c new file mode 100644 index 0000000000..b91f58e644 --- /dev/null +++ b/cpukit/posix/src/psxnametoid.c @@ -0,0 +1,58 @@ +/* + * COPYRIGHT (c) 1989-2009. + * 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. + * + * $Id$ + */ + +#if HAVE_CONFIG_H + #include "config.h" +#endif + +#include + +#include +#include +#include + +/* pure ANSI mode does not have this prototype */ +size_t strnlen(const char *, size_t); + +int _POSIX_Name_to_id( + Objects_Information *information, + const char *name, + Objects_Id *id, + size_t *len +) +{ + int eno = EINVAL; + size_t n = 0; + + if ( name != NULL && name [0] != '\0' ) { + n = strnlen( name, NAME_MAX ); + + if ( n < NAME_MAX ) { + Objects_Name_or_id_lookup_errors status = _Objects_Name_to_id_string( + information, + name, + id + ); + + if ( status == OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL ) { + eno = 0; + } else { + eno = ENOENT; + } + } else { + eno = ENAMETOOLONG; + } + } + + *len = n; + + return eno; +} diff --git a/cpukit/posix/src/semaphorecreatesupp.c b/cpukit/posix/src/semaphorecreatesupp.c index 42e530bf07..7673b51752 100644 --- a/cpukit/posix/src/semaphorecreatesupp.c +++ b/cpukit/posix/src/semaphorecreatesupp.c @@ -24,13 +24,11 @@ #include #include +#include #include #include #include -/* pure ANSI mode does not have this prototype */ -size_t strnlen(const char *, size_t); - /* * _POSIX_Semaphore_Create_support * @@ -39,7 +37,8 @@ size_t strnlen(const char *, size_t); * sem_open. */ int _POSIX_Semaphore_Create_support( - const char *name, + const char *name_arg, + size_t name_len, int pshared, unsigned int value, POSIX_Semaphore_Control **the_sem @@ -47,26 +46,35 @@ int _POSIX_Semaphore_Create_support( { POSIX_Semaphore_Control *the_semaphore; CORE_semaphore_Attributes *the_sem_attr; - char *name_p = (char *)name; + char *name; /* Sharing semaphores among processes is not currently supported */ if (pshared != 0) rtems_set_errno_and_return_minus_one( ENOSYS ); - if ( name ) { - if ( strnlen( name, NAME_MAX ) >= NAME_MAX ) - rtems_set_errno_and_return_minus_one( ENAMETOOLONG ); - } - _Thread_Disable_dispatch(); the_semaphore = _POSIX_Semaphore_Allocate(); - if ( !the_semaphore ) { _Thread_Enable_dispatch(); rtems_set_errno_and_return_minus_one( ENOSPC ); } + /* + * Make a copy of the user's string for name just in case it was + * dynamically constructed. + */ + if ( name_arg != NULL ) { + name = _Workspace_String_duplicate( name_arg, name_len ); + if ( !name ) { + _POSIX_Semaphore_Free( the_semaphore ); + _Thread_Enable_dispatch(); + rtems_set_errno_and_return_minus_one( ENOMEM ); + } + } else { + name = NULL; + } + the_semaphore->process_shared = pshared; if ( name ) { @@ -103,7 +111,7 @@ int _POSIX_Semaphore_Create_support( _Objects_Open_string( &_POSIX_Semaphore_Information, &the_semaphore->Object, - name_p + name ); *the_sem = the_semaphore; diff --git a/cpukit/posix/src/semaphorenametoid.c b/cpukit/posix/src/semaphorenametoid.c deleted file mode 100644 index a79d6d7233..0000000000 --- a/cpukit/posix/src/semaphorenametoid.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * COPYRIGHT (c) 1989-2007. - * 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. - * - * $Id$ - */ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -/* - * _POSIX_Semaphore_Name_to_id - * - * Look up the specified name and attempt to locate the id - * for the associated semaphore. - */ - -int _POSIX_Semaphore_Name_to_id( - const char *name, - sem_t *id -) -{ - Objects_Name_or_id_lookup_errors status; - Objects_Id the_id; - - if ( !name ) - return EINVAL; - - if ( !name[0] ) - return EINVAL; - - status = _Objects_Name_to_id_string( - &_POSIX_Semaphore_Information, - name, - &the_id - ); - *id = the_id; - - if ( status == OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL ) - return 0; - - return ENOENT; -} diff --git a/cpukit/posix/src/seminit.c b/cpukit/posix/src/seminit.c index 64848d8785..2ec803b8c4 100644 --- a/cpukit/posix/src/seminit.c +++ b/cpukit/posix/src/seminit.c @@ -45,6 +45,7 @@ int sem_init( status = _POSIX_Semaphore_Create_support( NULL, + 0, pshared, value, &the_semaphore diff --git a/cpukit/posix/src/semopen.c b/cpukit/posix/src/semopen.c index 3354935eba..398d9e8450 100644 --- a/cpukit/posix/src/semopen.c +++ b/cpukit/posix/src/semopen.c @@ -51,10 +51,10 @@ sem_t *sem_open( mode_t mode; unsigned int value = 0; int status; - sem_t the_semaphore_id; - sem_t *id; + Objects_Id the_semaphore_id; POSIX_Semaphore_Control *the_semaphore; Objects_Locations location; + size_t name_len; _Thread_Disable_dispatch(); @@ -65,7 +65,7 @@ sem_t *sem_open( va_end(arg); } - status = _POSIX_Semaphore_Name_to_id( name, &the_semaphore_id ); + status = _POSIX_Semaphore_Name_to_id( name, &the_semaphore_id, &name_len ); /* * If the name to id translation worked, then the semaphore exists @@ -96,7 +96,7 @@ sem_t *sem_open( rtems_set_errno_and_return_minus_one_cast( EEXIST, sem_t * ); } - the_semaphore = _POSIX_Semaphore_Get( &the_semaphore_id, &location ); + the_semaphore = _POSIX_Semaphore_Get( (sem_t *) &the_semaphore_id, &location ); the_semaphore->open_count += 1; _Thread_Enable_dispatch(); _Thread_Enable_dispatch(); @@ -110,6 +110,7 @@ sem_t *sem_open( status =_POSIX_Semaphore_Create_support( name, + name_len, false, /* not shared across processes */ value, &the_semaphore @@ -127,9 +128,8 @@ sem_t *sem_open( return_id: #if defined(RTEMS_USE_16_BIT_OBJECT) the_semaphore->Semaphore_id = the_semaphore->Object.id; - id = &the_semaphore->Semaphore_id; + return &the_semaphore->Semaphore_id; #else - id = (sem_t *)&the_semaphore->Object.id; + return (sem_t *)&the_semaphore->Object.id; #endif - return id; } diff --git a/cpukit/posix/src/semunlink.c b/cpukit/posix/src/semunlink.c index 0292e8008b..ca566a6f9b 100644 --- a/cpukit/posix/src/semunlink.c +++ b/cpukit/posix/src/semunlink.c @@ -42,11 +42,12 @@ int sem_unlink( { int status; register POSIX_Semaphore_Control *the_semaphore; - sem_t the_semaphore_id; + Objects_Id the_semaphore_id; + size_t name_len; _Thread_Disable_dispatch(); - status = _POSIX_Semaphore_Name_to_id( name, &the_semaphore_id ); + status = _POSIX_Semaphore_Name_to_id( name, &the_semaphore_id, &name_len ); if ( status != 0 ) { _Thread_Enable_dispatch(); rtems_set_errno_and_return_minus_one( status ); -- cgit v1.2.3