From 9c9c6a93b1a17ad12f61b41e1d5f4616871cdba7 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 21 Nov 2018 17:30:52 +0100 Subject: score: Remove Objects_Information::is_string Use Objects_Information::name_length to store this information. Update #3621. --- cpukit/include/rtems/score/objectimpl.h | 33 +++++++++++++------- cpukit/posix/src/key.c | 3 +- cpukit/posix/src/mqueue.c | 1 - cpukit/posix/src/psxsemaphore.c | 1 - cpukit/posix/src/ptimer.c | 3 +- cpukit/posix/src/shm.c | 1 - cpukit/rtems/src/barrier.c | 3 +- cpukit/rtems/src/dpmem.c | 3 +- cpukit/rtems/src/msg.c | 3 +- cpukit/rtems/src/part.c | 3 +- cpukit/rtems/src/ratemon.c | 3 +- cpukit/rtems/src/region.c | 3 +- cpukit/rtems/src/rtemstimer.c | 3 +- cpukit/rtems/src/sem.c | 3 +- cpukit/sapi/src/extension.c | 3 +- cpukit/score/src/objectgetnameasstring.c | 2 +- cpukit/score/src/objectidtoname.c | 2 +- cpukit/score/src/objectinitializeinformation.c | 4 +-- cpukit/score/src/objectnamespaceremove.c | 4 +-- cpukit/score/src/objectnametoidstring.c | 2 +- cpukit/score/src/objectsetname.c | 43 +++++++++++++------------- cpukit/score/src/thread.c | 3 +- testsuites/psxtests/psxobj01/init.c | 1 - 23 files changed, 62 insertions(+), 68 deletions(-) diff --git a/cpukit/include/rtems/score/objectimpl.h b/cpukit/include/rtems/score/objectimpl.h index 8934e24244..4141183176 100644 --- a/cpukit/include/rtems/score/objectimpl.h +++ b/cpukit/include/rtems/score/objectimpl.h @@ -132,14 +132,17 @@ typedef struct { Objects_Maximum inactive; /** This is the number of objects in a block. */ Objects_Maximum allocation_size; - /** This is the maximum length of names. */ + /** + * @brief This is the maximum length of names. + * + * A length of zero indicates that this object has a no string name + * (OBJECTS_NO_STRING_NAME). + */ uint16_t name_length; /** This field indicates the API of this object class. */ uint8_t the_api; /** This is the class of this object set. */ uint8_t the_class; - /** This is true if names are strings. */ - bool is_string; /** This is the true if unlimited objects in this class. */ bool auto_extend; /** This is the size in bytes of each object instance. */ @@ -225,14 +228,19 @@ void _Objects_Do_initialize_information( uint16_t the_class, uint32_t maximum, uint16_t size, - bool is_string, - uint32_t maximum_name_length + uint16_t maximum_name_length #if defined(RTEMS_MULTIPROCESSING) , Objects_Thread_queue_Extract_callout extract #endif ); +/** + * @brief Constant for the object information string name length to indicate + * that this object class has no string names. + */ +#define OBJECTS_NO_STRING_NAME 0 + /** * @brief Initialize object Information * @@ -261,7 +269,6 @@ void _Objects_Do_initialize_information( the_class, \ maximum, \ size, \ - is_string, \ maximum_name_length, \ extract \ ) \ @@ -271,7 +278,6 @@ void _Objects_Do_initialize_information( the_class, \ maximum, \ size, \ - is_string, \ maximum_name_length, \ extract \ ) @@ -282,7 +288,6 @@ void _Objects_Do_initialize_information( the_class, \ maximum, \ size, \ - is_string, \ maximum_name_length, \ extract \ ) \ @@ -292,7 +297,6 @@ void _Objects_Do_initialize_information( the_class, \ maximum, \ size, \ - is_string, \ maximum_name_length \ ) #endif @@ -735,6 +739,13 @@ Objects_Maximum _Objects_Active_count( const Objects_Information *information ); +RTEMS_INLINE_ROUTINE bool _Objects_Has_string_name( + const Objects_Information *information +) +{ + return information->name_length > 0; +} + RTEMS_INLINE_ROUTINE Objects_Maximum _Objects_Extend_size( const Objects_Information *information ) @@ -919,7 +930,7 @@ RTEMS_INLINE_ROUTINE void _Objects_Open_u32( uint32_t name ) { - _Assert( !information->is_string ); + _Assert( !_Objects_Has_string_name( information ) ); the_object->name.name_u32 = name; _Objects_Set_local_object( @@ -943,7 +954,7 @@ RTEMS_INLINE_ROUTINE void _Objects_Open_string( const char *name ) { - _Assert( information->is_string ); + _Assert( _Objects_Has_string_name( information ) ); the_object->name.name_p = name; _Objects_Set_local_object( diff --git a/cpukit/posix/src/key.c b/cpukit/posix/src/key.c index 71c202926e..a39e8d6479 100644 --- a/cpukit/posix/src/key.c +++ b/cpukit/posix/src/key.c @@ -142,8 +142,7 @@ static void _POSIX_Keys_Manager_initialization(void) /* maximum objects of this class */ sizeof( POSIX_Keys_Control ), /* size of this object's control block */ - false, /* true if names for this object are strings */ - 0, /* maximum length of each object's name */ + OBJECTS_NO_STRING_NAME, /* maximum length of each object's name */ NULL /* Proxy extraction support callout */ ); diff --git a/cpukit/posix/src/mqueue.c b/cpukit/posix/src/mqueue.c index e2c9b5f2b2..192d853c35 100644 --- a/cpukit/posix/src/mqueue.c +++ b/cpukit/posix/src/mqueue.c @@ -54,7 +54,6 @@ static void _POSIX_Message_queue_Manager_initialization(void) _Configuration_POSIX_Maximum_message_queues, sizeof( POSIX_Message_queue_Control ), /* size of this object's control block */ - true, /* true if names for this object are strings */ _POSIX_PATH_MAX, /* maximum length of each object's name */ NULL /* Proxy extraction support callout */ ); diff --git a/cpukit/posix/src/psxsemaphore.c b/cpukit/posix/src/psxsemaphore.c index 9e259b8ea3..a26ba7563e 100644 --- a/cpukit/posix/src/psxsemaphore.c +++ b/cpukit/posix/src/psxsemaphore.c @@ -45,7 +45,6 @@ static void _POSIX_Semaphore_Manager_initialization(void) _Configuration_POSIX_Maximum_named_semaphores, sizeof( POSIX_Semaphore_Control ), /* size of this object's control block */ - true, /* true if names for this object are strings */ _POSIX_PATH_MAX, /* maximum length of each object's name */ NULL /* Proxy extraction support callout */ ); diff --git a/cpukit/posix/src/ptimer.c b/cpukit/posix/src/ptimer.c index 9472cd49e5..f3af1710b8 100644 --- a/cpukit/posix/src/ptimer.c +++ b/cpukit/posix/src/ptimer.c @@ -65,8 +65,7 @@ static void _POSIX_Timer_Manager_initialization(void) _Configuration_POSIX_Maximum_timers, sizeof( POSIX_Timer_Control ), /* size of this object's control block */ - false, /* true if names for this object are strings */ - 0, /* maximum length of each object's name */ + OBJECTS_NO_STRING_NAME, /* maximum length of an object name */ NULL /* Proxy extraction support callout */ ); } diff --git a/cpukit/posix/src/shm.c b/cpukit/posix/src/shm.c index 131aa1384b..5030a9376e 100644 --- a/cpukit/posix/src/shm.c +++ b/cpukit/posix/src/shm.c @@ -35,7 +35,6 @@ static void _POSIX_Shm_Manager_initialization( void ) _Configuration_POSIX_Maximum_shms, sizeof( POSIX_Shm_Control ), /* size of this object's control block */ - true, /* true if names for this object are strings */ _POSIX_PATH_MAX, /* maximum length of each object's name */ NULL /* Proxy extraction support callout */ ); diff --git a/cpukit/rtems/src/barrier.c b/cpukit/rtems/src/barrier.c index a2912389e9..59b0a5d142 100644 --- a/cpukit/rtems/src/barrier.c +++ b/cpukit/rtems/src/barrier.c @@ -39,8 +39,7 @@ static void _Barrier_Manager_initialization(void) Configuration_RTEMS_API.maximum_barriers, /* maximum objects of this class */ sizeof( Barrier_Control ), /* size of this object's control block */ - false, /* true if the name is a string */ - RTEMS_MAXIMUM_NAME_LENGTH, /* maximum length of an object name */ + OBJECTS_NO_STRING_NAME, /* maximum length of an object name */ NULL /* Proxy extraction support callout */ ); } diff --git a/cpukit/rtems/src/dpmem.c b/cpukit/rtems/src/dpmem.c index 2522a59951..ccecdfd6cc 100644 --- a/cpukit/rtems/src/dpmem.c +++ b/cpukit/rtems/src/dpmem.c @@ -37,8 +37,7 @@ static void _Dual_ported_memory_Manager_initialization(void) /* maximum objects of this class */ sizeof( Dual_ported_memory_Control ), /* size of this object's control block */ - false, /* true if names of this object are strings */ - RTEMS_MAXIMUM_NAME_LENGTH, /* maximum length of each object's name */ + OBJECTS_NO_STRING_NAME, /* maximum length of an object name */ NULL /* Proxy extraction support callout */ ); } diff --git a/cpukit/rtems/src/msg.c b/cpukit/rtems/src/msg.c index 44a0727ea4..8060735beb 100644 --- a/cpukit/rtems/src/msg.c +++ b/cpukit/rtems/src/msg.c @@ -39,8 +39,7 @@ static void _Message_queue_Manager_initialization(void) /* maximum objects of this class */ sizeof( Message_queue_Control ), /* size of this object's control block */ - false, /* true if names of this object are strings */ - RTEMS_MAXIMUM_NAME_LENGTH, /* maximum length of each object's name */ + OBJECTS_NO_STRING_NAME, /* maximum length of an object name */ _Message_queue_MP_Send_extract_proxy /* Proxy extraction support callout */ ); diff --git a/cpukit/rtems/src/part.c b/cpukit/rtems/src/part.c index 4df676ed7a..d395f34342 100644 --- a/cpukit/rtems/src/part.c +++ b/cpukit/rtems/src/part.c @@ -36,8 +36,7 @@ static void _Partition_Manager_initialization(void) Configuration_RTEMS_API.maximum_partitions, /* maximum objects of this class */ sizeof( Partition_Control ), /* size of this object's control block */ - false, /* true if the name is a string */ - RTEMS_MAXIMUM_NAME_LENGTH, /* maximum length of an object name */ + OBJECTS_NO_STRING_NAME, /* maximum length of an object name */ _Partition_MP_Send_extract_proxy /* Proxy extraction support callout */ ); diff --git a/cpukit/rtems/src/ratemon.c b/cpukit/rtems/src/ratemon.c index dd3ca29cdd..a8681dda44 100644 --- a/cpukit/rtems/src/ratemon.c +++ b/cpukit/rtems/src/ratemon.c @@ -36,8 +36,7 @@ static void _Rate_monotonic_Manager_initialization(void) Configuration_RTEMS_API.maximum_periods, /* maximum objects of this class */ sizeof( Rate_monotonic_Control ),/* size of this object's control block */ - false, /* true if the name is a string */ - RTEMS_MAXIMUM_NAME_LENGTH, /* maximum length of an object name */ + OBJECTS_NO_STRING_NAME, /* maximum length of an object name */ NULL /* Proxy extraction support callout */ ); } diff --git a/cpukit/rtems/src/region.c b/cpukit/rtems/src/region.c index 892c680f15..4fbce63160 100644 --- a/cpukit/rtems/src/region.c +++ b/cpukit/rtems/src/region.c @@ -47,8 +47,7 @@ static void _Region_Manager_initialization(void) Configuration_RTEMS_API.maximum_regions, /* maximum objects of this class */ sizeof( Region_Control ), /* size of this object's control block */ - false, /* true if the name is a string */ - RTEMS_MAXIMUM_NAME_LENGTH, /* maximum length of an object name */ + OBJECTS_NO_STRING_NAME, /* maximum length of an object name */ NULL /* Proxy extraction support callout */ ); } diff --git a/cpukit/rtems/src/rtemstimer.c b/cpukit/rtems/src/rtemstimer.c index d60e4a9b48..f0a8c672fa 100644 --- a/cpukit/rtems/src/rtemstimer.c +++ b/cpukit/rtems/src/rtemstimer.c @@ -38,8 +38,7 @@ static void _Timer_Manager_initialization(void) Configuration_RTEMS_API.maximum_timers , /* maximum objects of this class */ sizeof( Timer_Control ), /* size of this object's control block */ - false, /* true if the name is a string */ - RTEMS_MAXIMUM_NAME_LENGTH, /* maximum length of an object name */ + OBJECTS_NO_STRING_NAME, /* maximum length of an object name */ NULL /* Proxy extraction support callout */ ); } diff --git a/cpukit/rtems/src/sem.c b/cpukit/rtems/src/sem.c index 74ce661725..e91e2d14bf 100644 --- a/cpukit/rtems/src/sem.c +++ b/cpukit/rtems/src/sem.c @@ -33,8 +33,7 @@ static void _Semaphore_Manager_initialization(void) Configuration_RTEMS_API.maximum_semaphores, /* maximum objects of this class */ sizeof( Semaphore_Control ), /* size of this object's control block */ - false, /* true if the name is a string */ - RTEMS_MAXIMUM_NAME_LENGTH, /* maximum length of an object name */ + OBJECTS_NO_STRING_NAME, /* maximum length of an object name */ _Semaphore_MP_Send_extract_proxy /* Proxy extraction support callout */ ); diff --git a/cpukit/sapi/src/extension.c b/cpukit/sapi/src/extension.c index 9c496832ab..70246048a4 100644 --- a/cpukit/sapi/src/extension.c +++ b/cpukit/sapi/src/extension.c @@ -35,8 +35,7 @@ static void _Extension_Manager_initialization(void) OBJECTS_RTEMS_EXTENSIONS, rtems_configuration_get_maximum_extensions(), sizeof( Extension_Control ), - false, /* true if the name is a string */ - RTEMS_MAXIMUM_NAME_LENGTH, /* maximum length of an object name */ + OBJECTS_NO_STRING_NAME, /* maximum length of an object name */ NULL /* Proxy extraction support callout */ ); } diff --git a/cpukit/score/src/objectgetnameasstring.c b/cpukit/score/src/objectgetnameasstring.c index ed6a73c0f8..845334075a 100644 --- a/cpukit/score/src/objectgetnameasstring.c +++ b/cpukit/score/src/objectgetnameasstring.c @@ -114,7 +114,7 @@ char *_Objects_Get_name_as_string( _Objects_Name_to_string( the_object->name, - information->is_string, + _Objects_Has_string_name( information ), name, length ); diff --git a/cpukit/score/src/objectidtoname.c b/cpukit/score/src/objectidtoname.c index 85eb409a8e..63948160e6 100644 --- a/cpukit/score/src/objectidtoname.c +++ b/cpukit/score/src/objectidtoname.c @@ -40,7 +40,7 @@ Objects_Name_or_id_lookup_errors _Objects_Id_to_name ( if ( !information ) return OBJECTS_INVALID_ID; - if ( information->is_string ) + if ( _Objects_Has_string_name( information ) ) return OBJECTS_INVALID_ID; the_object = _Objects_Get( diff --git a/cpukit/score/src/objectinitializeinformation.c b/cpukit/score/src/objectinitializeinformation.c index 23c7819bfa..2105c325d3 100644 --- a/cpukit/score/src/objectinitializeinformation.c +++ b/cpukit/score/src/objectinitializeinformation.c @@ -30,8 +30,7 @@ void _Objects_Do_initialize_information( uint16_t the_class, uint32_t maximum, uint16_t size, - bool is_string, - uint32_t maximum_name_length + uint16_t maximum_name_length #if defined(RTEMS_MULTIPROCESSING) , Objects_Thread_queue_Extract_callout extract @@ -49,7 +48,6 @@ void _Objects_Do_initialize_information( information->inactive_per_block = 0; information->object_blocks = 0; information->inactive = 0; - information->is_string = is_string; /* * Set the maximum value to 0. It will be updated when objects are diff --git a/cpukit/score/src/objectnamespaceremove.c b/cpukit/score/src/objectnamespaceremove.c index cc2c954a77..122ed862b7 100644 --- a/cpukit/score/src/objectnamespaceremove.c +++ b/cpukit/score/src/objectnamespaceremove.c @@ -27,7 +27,7 @@ void _Objects_Namespace_remove_u32( Objects_Control *the_object ) { - _Assert( !information->is_string ); + _Assert( !_Objects_Has_string_name( information ) ); the_object->name.name_u32 = 0; } @@ -38,7 +38,7 @@ void _Objects_Namespace_remove_string( { char *name; - _Assert( information->is_string ); + _Assert( _Objects_Has_string_name( information ) ); name = RTEMS_DECONST( char *, the_object->name.name_p ); the_object->name.name_p = NULL; _Workspace_Free( name ); diff --git a/cpukit/score/src/objectnametoidstring.c b/cpukit/score/src/objectnametoidstring.c index dd69f8a9ea..3bca0441e0 100644 --- a/cpukit/score/src/objectnametoidstring.c +++ b/cpukit/score/src/objectnametoidstring.c @@ -33,7 +33,7 @@ Objects_Control *_Objects_Get_by_name( size_t max_name_length; uint32_t index; - _Assert( information->is_string ); + _Assert( _Objects_Has_string_name( information ) ); _Assert( _Objects_Allocator_is_owner() ); if ( name == NULL ) { diff --git a/cpukit/score/src/objectsetname.c b/cpukit/score/src/objectsetname.c index 227de515ec..32197a3cf8 100644 --- a/cpukit/score/src/objectsetname.c +++ b/cpukit/score/src/objectsetname.c @@ -29,32 +29,33 @@ bool _Objects_Set_name( const char *name ) { - size_t length; - const char *s; + if ( _Objects_Has_string_name( information ) ) { + size_t length; + char *dup; - s = name; - length = strnlen( name, information->name_length ); + length = strnlen( name, information->name_length ); + dup = _Workspace_String_duplicate( name, length ); + if ( dup == NULL ) { + return false; + } - if ( information->is_string ) { - char *d; + the_object->name.name_p = dup; + } else { + char c[ 4 ]; + size_t i; - d = _Workspace_Allocate( length + 1 ); - if ( !d ) - return false; + memset( c, ' ', sizeof( c ) ); - _Workspace_Free( (void *)the_object->name.name_p ); - the_object->name.name_p = NULL; + for ( i = 0; i < 4; ++i ) { + if ( name[ i ] == '\0') { + break; + } - strncpy( d, name, length ); - d[length] = '\0'; - the_object->name.name_p = d; - } else { - the_object->name.name_u32 = _Objects_Build_name( - ((length) ? s[ 0 ] : ' '), - ((length > 1) ? s[ 1 ] : ' '), - ((length > 2) ? s[ 2 ] : ' '), - ((length > 3) ? s[ 3 ] : ' ') - ); + c[ i ] = name[ i ]; + } + + the_object->name.name_u32 = + _Objects_Build_name( c[ 0 ], c[ 1 ], c[ 2 ], c[ 3 ] ); } return true; diff --git a/cpukit/score/src/thread.c b/cpukit/score/src/thread.c index b63a6b14cd..5c27ee00ef 100644 --- a/cpukit/score/src/thread.c +++ b/cpukit/score/src/thread.c @@ -58,8 +58,7 @@ void _Thread_Initialize_information( the_class, maximum, _Thread_Control_size, - false, - RTEMS_MAXIMUM_NAME_LENGTH, + OBJECTS_NO_STRING_NAME, NULL ); diff --git a/testsuites/psxtests/psxobj01/init.c b/testsuites/psxtests/psxobj01/init.c index ca1fbc52ee..52cad3462d 100644 --- a/testsuites/psxtests/psxobj01/init.c +++ b/testsuites/psxtests/psxobj01/init.c @@ -45,7 +45,6 @@ rtems_task Init( 4, /* the_class */ 0, /* maximum */ 4, /* size */ - true, /* is_string */ 10, /* maximum_name_length */ NULL /* Objects_Thread_queue_Extract_callout extract */ ); -- cgit v1.2.3