size_t *found_idx)
{
size_t i, lower = 0, upper = symbols_len;
- struct symbol *s;
+ struct symbol *s = NULL;
+
+ if (found_idx)
+ *found_idx = SIZE_MAX;
if (!symbols_len)
return NULL;
int cmp;
i = (lower + upper) / 2;
- s = symbols[i];
- cmp = symbol__match_symbol_name(s->name, name, includes);
+ cmp = symbol__match_symbol_name(symbols[i]->name, name, includes);
if (cmp > 0)
upper = i;
else {
if (found_idx)
*found_idx = i;
+ s = symbols[i];
break;
}
}
- if (includes != SYMBOL_TAG_INCLUDE__DEFAULT_ONLY) {
+ if (s && includes != SYMBOL_TAG_INCLUDE__DEFAULT_ONLY) {
/* return first symbol that has same name (if any) */
for (; i > 0; i--) {
struct symbol *tmp = symbols[i - 1];
if (!arch__compare_symbol_names(tmp->name, s->name)) {
if (found_idx)
*found_idx = i - 1;
+ s = tmp;
} else
break;
-
- s = tmp;
}
}
- assert(!found_idx || s == symbols[*found_idx]);
+ assert(!found_idx || !s || s == symbols[*found_idx]);
return s;
}