Skip to content

Commit

Permalink
api: Use hashtable function for API_env_enum
Browse files Browse the repository at this point in the history
The current code can loop undefinitly as it doesn't parse
correctly the env data.
Since the env is an hashtable, use the hashtable function for
the API_ENV_ENUM api call.

Signed-off-by: Emmanuel Vadot <[email protected]>
Reviewed-by: Simon Glass <[email protected]>
  • Loading branch information
evadot authored and trini committed Jan 20, 2017
1 parent 6baa692 commit 6215bd4
Showing 1 changed file with 31 additions and 29 deletions.
60 changes: 31 additions & 29 deletions api/api.c
Original file line number Diff line number Diff line change
Expand Up @@ -495,45 +495,47 @@ static int API_env_set(va_list ap)
*/
static int API_env_enum(va_list ap)
{
int i, n;
char *last, **next;
int i, buflen;
char *last, **next, *s;
ENTRY *match, search;
static char *var;

last = (char *)va_arg(ap, unsigned long);

if ((next = (char **)va_arg(ap, uintptr_t)) == NULL)
return API_EINVAL;

if (last == NULL)
/* start over */
*next = ((char *)env_get_addr(0));
else {
*next = last;

for (i = 0; env_get_char(i) != '\0'; i = n + 1) {
for (n = i; env_get_char(n) != '\0'; ++n) {
if (n >= CONFIG_ENV_SIZE) {
/* XXX shouldn't we set *next = NULL?? */
return 0;
}
}

if (envmatch((uchar *)last, i) < 0)
continue;

/* try to get next name */
i = n + 1;
if (env_get_char(i) == '\0') {
/* no more left */
*next = NULL;
return 0;
}

*next = ((char *)env_get_addr(i));
return 0;
if (last == NULL) {
var = NULL;
i = 0;
} else {
var = strdup(last);
s = strchr(var, '=');
if (s != NULL)
*s = 0;
search.key = var;
i = hsearch_r(search, FIND, &match, &env_htab, 0);
if (i == 0) {
i = API_EINVAL;
goto done;
}
}

/* match the next entry after i */
i = hmatch_r("", i, &match, &env_htab);
if (i == 0)
goto done;
buflen = strlen(match->key) + strlen(match->data) + 2;
var = realloc(var, buflen);
snprintf(var, buflen, "%s=%s", match->key, match->data);
*next = var;
return 0;

done:
free(var);
var = NULL;
*next = NULL;
return i;
}

/*
Expand Down

0 comments on commit 6215bd4

Please sign in to comment.