diff options
Diffstat (limited to 'rtl.c')
-rw-r--r-- | rtl.c | 19 |
1 files changed, 15 insertions, 4 deletions
@@ -378,7 +378,7 @@ rtems_rtl_find_obj (const char* name) rtems_rtl_obj_t* found = NULL; const char* aname = NULL; const char* oname = NULL; - int ooffset; + off_t ooffset; if (!rtems_rtl_parse_name (name, &aname, &oname, &ooffset)) return NULL; @@ -388,12 +388,23 @@ rtems_rtl_find_obj (const char* name) while (!rtems_chain_is_tail (&rtl->objects, node)) { rtems_rtl_obj_t* obj = (rtems_rtl_obj_t*) node; - if (rtems_rtl_match_name (obj, name)) - return obj; + if ((aname == NULL && strcmp (obj->oname, oname) == 0) || + (aname != NULL && + strcmp (obj->aname, aname) == 0 && strcmp (obj->oname, oname) == 0)) + { + found = obj; + break; + } node = rtems_chain_next (node); } - return NULL; + if (!aname) + rtems_rtl_alloc_del(RTEMS_RTL_ALLOC_OBJECT, (void*) aname); + + if (!oname) + rtems_rtl_alloc_del(RTEMS_RTL_ALLOC_OBJECT, (void*) oname); + + return found; } rtems_rtl_obj_t* |