edbus: simplify and explain code

No need to strlen(obj->path) twice per loop iteration. Do it only once
and add a comment explaining the difference between handling "/" and
"/my/path/to/obj".



SVN revision: 79176
This commit is contained in:
Lucas De Marchi 2012-11-12 16:06:51 +00:00
parent fb26be4f1b
commit e619f29e6e
1 changed files with 9 additions and 8 deletions

View File

@ -356,6 +356,7 @@ cb_introspect(const EDBus_Service_Interface *_iface, const EDBus_Message *messag
Eina_Iterator *iterator;
EDBus_Service_Interface *iface;
EDBus_Service_Object *child;
size_t baselen;
if (obj->introspection_data)
eina_strbuf_reset(obj->introspection_data);
@ -372,15 +373,15 @@ cb_introspect(const EDBus_Service_Interface *_iface, const EDBus_Message *messag
_introspect_append_interface(obj->introspection_data, iface);
eina_iterator_free(iterator);
baselen = strlen(obj->path);
/* account for the last '/' */
if (baselen != 1)
baselen++;
EINA_INLIST_FOREACH(obj->children, child)
{
const char *subpath;
if (strlen(obj->path) == 1)
subpath = child->path+strlen(obj->path);
else
subpath = child->path+strlen(obj->path)+1;
eina_strbuf_append_printf(obj->introspection_data, "<node name=\"%s\" />", subpath);
}
eina_strbuf_append_printf(obj->introspection_data,
"<node name=\"%s\" />",
child->path + baselen);
eina_strbuf_append(obj->introspection_data, "</node>");
obj->introspection_dirty = EINA_FALSE;