From f3a5a20cd04ee8a5e32bc990a6001795f5136eab Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 23 Jan 2008 22:58:36 +0000 Subject: [PATCH] 2008-01-23 Joel Sherrill * score/src/objectnametoidstring.c: New file. --- cpukit/ChangeLog | 4 + cpukit/score/src/objectnametoidstring.c | 107 ++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 cpukit/score/src/objectnametoidstring.c diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index b6e27d92ed..b21a30e6df 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,7 @@ +2008-01-23 Joel Sherrill + + * score/src/objectnametoidstring.c: New file. + 2008-01-23 Joel Sherrill * itron/include/rtems/itron/object.h, itron/src/cre_tsk.c, diff --git a/cpukit/score/src/objectnametoidstring.c b/cpukit/score/src/objectnametoidstring.c new file mode 100644 index 0000000000..f6ebd41d4e --- /dev/null +++ b/cpukit/score/src/objectnametoidstring.c @@ -0,0 +1,107 @@ +/* + * Object Handler - Object ID to Name (String) + * + * + * COPYRIGHT (c) 1989-2008. + * 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 +#if defined(RTEMS_MULTIPROCESSING) +#include +#endif +#include +#include +#include +#include + +/*PAGE + * + * _Objects_Name_to_id_string + * + * These kernel routines search the object table(s) for the given + * object name and returns the associated object id. + * + * Input parameters: + * information - object information + * name - user defined object name + * node - node indentifier (0 indicates any node) + * id - address of return ID + * + * Output parameters: + * id - object id + * OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL - if successful + * error code - if unsuccessful + */ + +Objects_Name_or_id_lookup_errors _Objects_Name_to_id_string( + Objects_Information *information, + const char *name, + uint32_t node, + Objects_Id *id +) +{ + boolean search_local_node; + Objects_Control *the_object; + uint32_t index; + uint32_t name_length; + + /* ASSERT: information->is_string == TRUE */ + + if ( !id ) + return OBJECTS_INVALID_ADDRESS; + + if ( !name ) + return OBJECTS_INVALID_NAME; + + search_local_node = FALSE; + + if ( information->maximum != 0 && + (node == OBJECTS_SEARCH_ALL_NODES || + node == OBJECTS_SEARCH_LOCAL_NODE || + _Objects_Is_local_node( node ) + )) + search_local_node = TRUE; + + if ( search_local_node ) { + name_length = information->name_length; + + for ( index = 1; index <= information->maximum; index++ ) { + the_object = information->local_table[ index ]; + if ( !the_object ) + continue; + + if ( !the_object->name.name_p ) + continue; + + if (!strncmp( name, the_object->name.name_p, information->name_length)) { + *id = the_object->id; + return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL; + } + } + } + +#if defined(RTEMS_MULTIPROCESSING) + if ( _Objects_Is_local_node( node ) || node == OBJECTS_SEARCH_LOCAL_NODE ) + return OBJECTS_INVALID_NAME; + + return ( _Objects_MP_Global_name_search( information, name, node, id ) ); +#else + return OBJECTS_INVALID_NAME; +#endif +}