[PATCH 03/14] Remove RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES

Sebastian Huber sebastian.huber at embedded-brains.de
Mon Oct 29 09:03:12 UTC 2018


Enable support for string objects names unconditionally.  Add const
qualifier throughout.  Split _Objects_Namespace_remove() into
_Objects_Namespace_remove_u32() and _Objects_Namespace_remove_string()
to avoid an unnecessary dependency on _Workspace_Free().

Update #2514.
---
 cpukit/include/rtems/posix/mqueueimpl.h        |  6 ++-
 cpukit/include/rtems/posix/semaphoreimpl.h     |  6 ++-
 cpukit/include/rtems/score/object.h            | 16 +-----
 cpukit/include/rtems/score/objectimpl.h        | 74 +++++++++++++-------------
 cpukit/posix/src/key.c                         |  4 +-
 cpukit/posix/src/ptimer.c                      |  4 +-
 cpukit/posix/src/semaphoredeletesupp.c         |  2 +-
 cpukit/score/src/objectclose.c                 |  6 +--
 cpukit/score/src/objectgetnameasstring.c       | 17 ++----
 cpukit/score/src/objectidtoname.c              |  6 +--
 cpukit/score/src/objectinitializeinformation.c |  4 +-
 cpukit/score/src/objectnamespaceremove.c       | 34 ++++++------
 cpukit/score/src/objectnametoidstring.c        |  2 -
 cpukit/score/src/objectsetname.c               | 12 ++---
 14 files changed, 85 insertions(+), 108 deletions(-)

diff --git a/cpukit/include/rtems/posix/mqueueimpl.h b/cpukit/include/rtems/posix/mqueueimpl.h
index 6813a3ef88..28381ad54b 100644
--- a/cpukit/include/rtems/posix/mqueueimpl.h
+++ b/cpukit/include/rtems/posix/mqueueimpl.h
@@ -156,8 +156,10 @@ RTEMS_INLINE_ROUTINE void _POSIX_Message_queue_Namespace_remove (
   POSIX_Message_queue_Control *the_mq
 )
 {
-  _Objects_Namespace_remove( 
-    &_POSIX_Message_queue_Information, &the_mq->Object );
+  _Objects_Namespace_remove_string(
+    &_POSIX_Message_queue_Information,
+    &the_mq->Object
+  );
 }
 
 RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control *
diff --git a/cpukit/include/rtems/posix/semaphoreimpl.h b/cpukit/include/rtems/posix/semaphoreimpl.h
index fd17743699..5ae6a300fa 100644
--- a/cpukit/include/rtems/posix/semaphoreimpl.h
+++ b/cpukit/include/rtems/posix/semaphoreimpl.h
@@ -107,8 +107,10 @@ RTEMS_INLINE_ROUTINE void _POSIX_Semaphore_Namespace_remove (
   POSIX_Semaphore_Control *the_semaphore
 )
 {
-  _Objects_Namespace_remove( 
-    &_POSIX_Semaphore_Information, &the_semaphore->Object );
+  _Objects_Namespace_remove_string(
+    &_POSIX_Semaphore_Information,
+    &the_semaphore->Object
+  );
 }
 
 RTEMS_INLINE_ROUTINE POSIX_Semaphore_Control *_POSIX_Semaphore_Get_by_name(
diff --git a/cpukit/include/rtems/score/object.h b/cpukit/include/rtems/score/object.h
index 6789c61fea..adafcaa72d 100644
--- a/cpukit/include/rtems/score/object.h
+++ b/cpukit/include/rtems/score/object.h
@@ -36,16 +36,6 @@ extern "C" {
  */
 /**@{*/
 
-#if defined(RTEMS_POSIX_API)
-  /**
-   *  This macro is defined when an API is enabled that requires the
-   *  use of strings for object names.  Since the Classic API uses
-   *  32-bit unsigned integers and not strings, this allows us to
-   *  disable this in the smallest RTEMS configuratinos.
-   */
-  #define RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES
-#endif
-
 /**
  * @defgroup ScoreCPU CPU Architecture Support
  *
@@ -67,10 +57,8 @@ extern "C" {
  *  object names.
  */
 typedef union {
-  #if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
-    /** This is a pointer to a string name. */
-    const char *name_p;
-  #endif
+  /** This is a pointer to a string name. */
+  const char *name_p;
   /** This is the actual 32-bit "raw" integer name. */
   uint32_t    name_u32;
 } Objects_Name;
diff --git a/cpukit/include/rtems/score/objectimpl.h b/cpukit/include/rtems/score/objectimpl.h
index cc5820785c..1bef14b116 100644
--- a/cpukit/include/rtems/score/objectimpl.h
+++ b/cpukit/include/rtems/score/objectimpl.h
@@ -130,6 +130,8 @@ typedef struct {
   Objects_Id        maximum_id;
   /** This is the maximum number of objects in this class. */
   Objects_Maximum   maximum;
+  /** 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 number of objects in a block. */
@@ -146,10 +148,6 @@ typedef struct {
   uint32_t         *inactive_per_block;
   /** This is a table to the chain of inactive object memory blocks. */
   void            **object_blocks;
-  #if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
-    /** This is true if names are strings. */
-    bool              is_string;
-  #endif
   /** This is the maximum length of names. */
   uint16_t          name_length;
   #if defined(RTEMS_MULTIPROCESSING)
@@ -685,22 +683,31 @@ size_t _Objects_Name_to_string(
  *  @retval If successful, true is returned.  Otherwise false is returned.
  */
 bool _Objects_Set_name(
-  Objects_Information *information,
-  Objects_Control     *the_object,
-  const char          *name
+  const Objects_Information *information,
+  Objects_Control           *the_object,
+  const char                *name
 );
 
 /**
- *  @brief Removes object from namespace.
+ * @brief Removes object with a 32-bit integer name from its namespace.
  *
- *  This function removes @a the_object from the namespace.
+ * @param[in] information The corresponding object information table.
+ * @param[in] the_object The object.
+ */
+void _Objects_Namespace_remove_u32(
+  const Objects_Information *information,
+  Objects_Control           *the_object
+);
+
+/**
+ * @brief Removes object with a string name from its namespace.
  *
- *  @param[in] information points to an Object Information Table.
- *  @param[in] the_object is a pointer to an object.
+ * @param[in] information The corresponding object information table.
+ * @param[in] the_object The object.
  */
-void _Objects_Namespace_remove(
-  Objects_Information  *information,
-  Objects_Control      *the_object
+void _Objects_Namespace_remove_string(
+  const Objects_Information *information,
+  Objects_Control           *the_object
 );
 
 /**
@@ -713,8 +720,8 @@ void _Objects_Namespace_remove(
  *  @param[in] the_object is a pointer to an object
  */
 void _Objects_Close(
-  Objects_Information  *information,
-  Objects_Control      *the_object
+  const Objects_Information *information,
+  Objects_Control           *the_object
 );
 
 /**
@@ -828,9 +835,9 @@ RTEMS_INLINE_ROUTINE bool _Objects_Are_ids_equal(
  */
 
 RTEMS_INLINE_ROUTINE void _Objects_Set_local_object(
-  Objects_Information *information,
-  uint32_t             index,
-  Objects_Control     *the_object
+  const Objects_Information *information,
+  uint32_t                   index,
+  Objects_Control           *the_object
 )
 {
   /*
@@ -838,10 +845,7 @@ RTEMS_INLINE_ROUTINE void _Objects_Set_local_object(
    *  where the Id is known to be good.  Therefore, this should NOT
    *  occur in normal situations.
    */
-  #if defined(RTEMS_DEBUG)
-    if ( index > information->maximum )
-      return;
-  #endif
+  _Assert( index <= information->maximum );
 
   information->local_table[ index ] = the_object;
 }
@@ -861,8 +865,8 @@ RTEMS_INLINE_ROUTINE void _Objects_Set_local_object(
  */
 
 RTEMS_INLINE_ROUTINE void _Objects_Invalidate_Id(
-  Objects_Information  *information,
-  Objects_Control      *the_object
+  const Objects_Information *information,
+  Objects_Control           *the_object
 )
 {
   _Assert( information != NULL );
@@ -910,12 +914,12 @@ RTEMS_INLINE_ROUTINE void _Objects_Open(
  * @param[in] name is the name of the object to make accessible
  */
 RTEMS_INLINE_ROUTINE void _Objects_Open_u32(
-  Objects_Information *information,
-  Objects_Control     *the_object,
-  uint32_t             name
+  const Objects_Information *information,
+  Objects_Control           *the_object,
+  uint32_t                   name
 )
 {
-  /* ASSERT: information->is_string == false */
+  _Assert( !information->is_string );
   the_object->name.name_u32 = name;
 
   _Objects_Set_local_object(
@@ -934,15 +938,13 @@ RTEMS_INLINE_ROUTINE void _Objects_Open_u32(
  * @param[in] name is the name of the object to make accessible
  */
 RTEMS_INLINE_ROUTINE void _Objects_Open_string(
-  Objects_Information *information,
-  Objects_Control     *the_object,
-  const char          *name
+  const Objects_Information *information,
+  Objects_Control           *the_object,
+  const char                *name
 )
 {
-  #if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
-    /* ASSERT: information->is_string */
-    the_object->name.name_p = name;
-  #endif
+  _Assert( information->is_string );
+  the_object->name.name_p = name;
 
   _Objects_Set_local_object(
     information,
diff --git a/cpukit/posix/src/key.c b/cpukit/posix/src/key.c
index 48a52dfb34..71c202926e 100644
--- a/cpukit/posix/src/key.c
+++ b/cpukit/posix/src/key.c
@@ -142,8 +142,8 @@ static void _POSIX_Keys_Manager_initialization(void)
                                 /* maximum objects of this class */
     sizeof( POSIX_Keys_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 */
+    false,                      /* true if names for this object are strings */
+    0,                          /* 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 de3645cc14..e938d50058 100644
--- a/cpukit/posix/src/ptimer.c
+++ b/cpukit/posix/src/ptimer.c
@@ -66,8 +66,8 @@ static void _POSIX_Timer_Manager_initialization(void)
                                 /* maximum objects of this class */
     sizeof( POSIX_Timer_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 */
+    false,                      /* true if names for this object are strings */
+    0,                          /* maximum length of each object's name */
     NULL                        /* Proxy extraction support callout */
   );
 }
diff --git a/cpukit/posix/src/semaphoredeletesupp.c b/cpukit/posix/src/semaphoredeletesupp.c
index dbcfebfd65..69452369fb 100644
--- a/cpukit/posix/src/semaphoredeletesupp.c
+++ b/cpukit/posix/src/semaphoredeletesupp.c
@@ -23,7 +23,7 @@
 void _POSIX_Semaphore_Delete( POSIX_Semaphore_Control *the_semaphore )
 {
   if ( !the_semaphore->linked && !the_semaphore->open_count ) {
-    _Objects_Close( &_POSIX_Semaphore_Information, &the_semaphore->Object );
+    _Objects_Invalidate_Id( &_POSIX_Semaphore_Information, &the_semaphore->Object );
     _POSIX_Semaphore_Destroy( &the_semaphore->Semaphore );
     _POSIX_Semaphore_Free( the_semaphore );
   }
diff --git a/cpukit/score/src/objectclose.c b/cpukit/score/src/objectclose.c
index 52eb10c60b..e5ee4b5d46 100644
--- a/cpukit/score/src/objectclose.c
+++ b/cpukit/score/src/objectclose.c
@@ -21,11 +21,11 @@
 #include <rtems/score/objectimpl.h>
 
 void _Objects_Close(
-  Objects_Information  *information,
-  Objects_Control      *the_object
+  const Objects_Information *information,
+  Objects_Control           *the_object
 )
 {
   _Objects_Invalidate_Id( information, the_object );
 
-  _Objects_Namespace_remove( information, the_object );
+  _Objects_Namespace_remove_u32( information, the_object );
 }
diff --git a/cpukit/score/src/objectgetnameasstring.c b/cpukit/score/src/objectgetnameasstring.c
index f23b1599e1..ed6a73c0f8 100644
--- a/cpukit/score/src/objectgetnameasstring.c
+++ b/cpukit/score/src/objectgetnameasstring.c
@@ -45,12 +45,9 @@ size_t _Objects_Name_to_string(
   char       *d;
   size_t      i;
 
-#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
   if ( is_string ) {
     s = name.name_p;
-  } else
-#endif
-  {
+  } else {
     lname[ 0 ] = (name.name_u32 >> 24) & 0xff;
     lname[ 1 ] = (name.name_u32 >> 16) & 0xff;
     lname[ 2 ] = (name.name_u32 >>  8) & 0xff;
@@ -93,10 +90,10 @@ char *_Objects_Get_name_as_string(
   char             *name
 )
 {
-  Objects_Information   *information;
-  Objects_Control       *the_object;
-  ISR_lock_Context       lock_context;
-  Objects_Id             tmpId;
+  const Objects_Information *information;
+  const Objects_Control     *the_object;
+  ISR_lock_Context           lock_context;
+  Objects_Id                 tmpId;
 
   if ( length == 0 )
     return NULL;
@@ -117,11 +114,7 @@ char *_Objects_Get_name_as_string(
 
   _Objects_Name_to_string(
     the_object->name,
-#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
     information->is_string,
-#else
-    false,
-#endif
     name,
     length
   );
diff --git a/cpukit/score/src/objectidtoname.c b/cpukit/score/src/objectidtoname.c
index aff3296738..85eb409a8e 100644
--- a/cpukit/score/src/objectidtoname.c
+++ b/cpukit/score/src/objectidtoname.c
@@ -40,10 +40,8 @@ Objects_Name_or_id_lookup_errors _Objects_Id_to_name (
   if ( !information )
     return OBJECTS_INVALID_ID;
 
-  #if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
-    if ( information->is_string )
-      return OBJECTS_INVALID_ID;
-  #endif
+  if ( information->is_string )
+    return OBJECTS_INVALID_ID;
 
   the_object = _Objects_Get(
     tmpId,
diff --git a/cpukit/score/src/objectinitializeinformation.c b/cpukit/score/src/objectinitializeinformation.c
index 8b1b88db07..23c7819bfa 100644
--- a/cpukit/score/src/objectinitializeinformation.c
+++ b/cpukit/score/src/objectinitializeinformation.c
@@ -49,9 +49,7 @@ void _Objects_Do_initialize_information(
   information->inactive_per_block = 0;
   information->object_blocks      = 0;
   information->inactive           = 0;
-  #if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
-    information->is_string        = is_string;
-  #endif
+  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 6698737254..fb7b54c532 100644
--- a/cpukit/score/src/objectnamespaceremove.c
+++ b/cpukit/score/src/objectnamespaceremove.c
@@ -22,24 +22,24 @@
 #include <rtems/score/objectimpl.h>
 #include <rtems/score/wkspace.h>
 
-void _Objects_Namespace_remove(
-  Objects_Information  *information,
-  Objects_Control      *the_object
+void _Objects_Namespace_remove_u32(
+  const Objects_Information *information,
+  Objects_Control           *the_object
 )
 {
-  #if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
-    /*
-     *  If this is a string format name, then free the memory.
-     */
-    if ( information->is_string )
-       _Workspace_Free( (void *)the_object->name.name_p );
-  #endif
-
-  /*
-   * Clear out either format.
-   */
-  #if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
-    the_object->name.name_p   = NULL;
-  #endif
+  _Assert( !information->is_string );
   the_object->name.name_u32 = 0;
 }
+
+void _Objects_Namespace_remove_string(
+  const Objects_Information *information,
+  Objects_Control           *the_object
+)
+{
+  void *name;
+
+  _Assert( information->is_string );
+  name = 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 bd4b4a9ead..dd69f8a9ea 100644
--- a/cpukit/score/src/objectnametoidstring.c
+++ b/cpukit/score/src/objectnametoidstring.c
@@ -22,7 +22,6 @@
 
 #include <string.h>
 
-#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
 Objects_Control *_Objects_Get_by_name(
   const Objects_Information *information,
   const char                *name,
@@ -72,4 +71,3 @@ Objects_Control *_Objects_Get_by_name(
   *error = OBJECTS_GET_BY_NAME_NO_OBJECT;
   return NULL;
 }
-#endif
diff --git a/cpukit/score/src/objectsetname.c b/cpukit/score/src/objectsetname.c
index c699570209..227de515ec 100644
--- a/cpukit/score/src/objectsetname.c
+++ b/cpukit/score/src/objectsetname.c
@@ -24,9 +24,9 @@
 #include <string.h>
 
 bool _Objects_Set_name(
-  Objects_Information *information,
-  Objects_Control     *the_object,
-  const char          *name
+  const Objects_Information *information,
+  Objects_Control           *the_object,
+  const char                *name
 )
 {
   size_t                 length;
@@ -35,7 +35,6 @@ bool _Objects_Set_name(
   s      = name;
   length = strnlen( name, information->name_length );
 
-#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
   if ( information->is_string ) {
     char *d;
 
@@ -49,16 +48,13 @@ bool _Objects_Set_name(
     strncpy( d, name, length );
     d[length] = '\0';
     the_object->name.name_p = d;
-  } else
-#endif
-  {
+  } else {
     the_object->name.name_u32 =  _Objects_Build_name(
       ((length)     ? s[ 0 ] : ' '),
       ((length > 1) ? s[ 1 ] : ' '),
       ((length > 2) ? s[ 2 ] : ' '),
       ((length > 3) ? s[ 3 ] : ' ')
     );
-
   }
 
   return true;
-- 
2.16.4



More information about the devel mailing list