let's stop smoking crack while coding :-P

dudes, WTF is that look to check for numbers, then use atoi()??? Use
strtol() and let it do both in one pass. Also, just do these for part
types that make sense. The loop using child could result in unused
variables in lots of cases, returning the wrong value when not found.



SVN revision: 50757
This commit is contained in:
Gustavo Sverzut Barbieri 2010-08-02 23:35:30 +00:00
parent 4b221c3936
commit 3994aee4d8
1 changed files with 32 additions and 22 deletions

View File

@ -4241,35 +4241,45 @@ _edje_children_get(Edje_Real_Part *rp, const char *partid)
{
Evas_Object *child;
Eina_List *l;
Eina_Bool number = EINA_TRUE;
unsigned int i;
long int v;
char *p;
for (i = 0; i < strlen(partid); ++i)
number &= isdigit(partid[i]) ? EINA_TRUE : EINA_FALSE;
if (!partid) return NULL;
if (rp->part->type == EDJE_PART_TYPE_BOX)
l = evas_object_box_children_get(rp->object);
else
if (rp->part->type == EDJE_PART_TYPE_TABLE)
l = evas_object_table_children_get(rp->object);
else
if (rp->part->type == EDJE_PART_TYPE_EXTERNAL)
return _edje_external_content_get(rp->swallowed_object, partid);
else
return NULL;
if (number)
switch (rp->part->type)
{
child = eina_list_nth(l, atoi(partid));
eina_list_free(l);
case EDJE_PART_TYPE_EXTERNAL:
return _edje_external_content_get(rp->swallowed_object, partid);
case EDJE_PART_TYPE_BOX:
l = evas_object_box_children_get(rp->object);
break;
case EDJE_PART_TYPE_TABLE:
l = evas_object_table_children_get(rp->object);
break;
default:
return NULL;
}
v = strtol(partid, &p, 10);
if ((*p == '\0') && (v >= 0))
{
child = eina_list_nth(l, v);
}
else
{
EINA_LIST_FREE(l, child)
if (!strcmp(evas_object_name_get(child), partid))
break ;
eina_list_free(l);
Evas_Object *cur;
child = NULL;
EINA_LIST_FREE(l, cur)
{
const char *name = evas_object_name_get(cur);
if ((name) && (!strcmp(name, partid)))
{
child = cur;
break;
}
}
}
eina_list_free(l);
return child;
}