score: Add and use _Objects_Name_to_string()

Update #2858.
This commit is contained in:
Sebastian Huber
2017-01-12 08:28:57 +01:00
parent 1772a04f68
commit b8bcebea18
2 changed files with 79 additions and 27 deletions

View File

@@ -654,6 +654,27 @@ char *_Objects_Get_name_as_string(
char *name
);
/**
* @brief Converts the specified object name to a text representation.
*
* Non-printable characters according to isprint() are converted to '*'.
*
* @param[in] name The object name.
* @param[in] is_string Indicates if the object name is a string or a four
* character array (32-bit unsigned integer).
* @param[in] buffer The string buffer for the text representation.
* @param[in] buffer_size The buffer size in characters.
*
* @retval The length of the text representation. May be greater than or equal
* to the buffer size if truncation occurred.
*/
size_t _Objects_Name_to_string(
Objects_Name name,
bool is_string,
char *buffer,
size_t buffer_size
);
/**
* @brief Set objects name.
*

View File

@@ -23,6 +23,54 @@
#include <ctype.h>
size_t _Objects_Name_to_string(
Objects_Name name,
bool is_string,
char *buffer,
size_t buffer_size
)
{
char lname[ 5 ];
const char *s;
char *d;
size_t i;
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
if ( is_string ) {
s = name.name_p;
} else
#endif
{
lname[ 0 ] = (name.name_u32 >> 24) & 0xff;
lname[ 1 ] = (name.name_u32 >> 16) & 0xff;
lname[ 2 ] = (name.name_u32 >> 8) & 0xff;
lname[ 3 ] = (name.name_u32 >> 0) & 0xff;
lname[ 4 ] = '\0';
s = lname;
}
d = buffer;
i = 1;
if ( s != NULL ) {
while ( *s != '\0' ) {
if ( i < buffer_size ) {
*d = isprint((unsigned char) *s) ? *s : '*';
++d;
}
++s;
++i;
}
}
if ( buffer_size > 0 ) {
*d = '\0';
}
return i - 1;
}
/*
* This method objects the name of an object and returns its name
* in the form of a C string. It attempts to be careful about
@@ -36,10 +84,6 @@ char *_Objects_Get_name_as_string(
)
{
Objects_Information *information;
const char *s;
char *d;
uint32_t i;
char lname[5];
Objects_Control *the_object;
ISR_lock_Context lock_context;
Objects_Id tmpId;
@@ -61,29 +105,16 @@ char *_Objects_Get_name_as_string(
return NULL;
}
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
if ( information->is_string ) {
s = the_object->name.name_p;
} else
#endif
{
uint32_t u32_name = (uint32_t) the_object->name.name_u32;
lname[ 0 ] = (u32_name >> 24) & 0xff;
lname[ 1 ] = (u32_name >> 16) & 0xff;
lname[ 2 ] = (u32_name >> 8) & 0xff;
lname[ 3 ] = (u32_name >> 0) & 0xff;
lname[ 4 ] = '\0';
s = lname;
}
d = name;
if ( s ) {
for ( i=0 ; i<(length-1) && *s ; i++, s++, d++ ) {
*d = (isprint((unsigned char)*s)) ? *s : '*';
}
}
*d = '\0';
_Objects_Name_to_string(
the_object->name,
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
information->is_string,
#else
false,
#endif
name,
length
);
_ISR_lock_ISR_enable( &lock_context );
return name;