forked from Imagelibrary/rtems
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user