#ifdef USE_HOSTCC /* HOST build */
# include <string.h>
# include <assert.h>
+# include <ctype.h>
# ifndef debug
# ifdef DEBUG
#else /* U-Boot build */
# include <common.h>
# include <linux/string.h>
+# include <linux/ctype.h>
#endif
#ifndef CONFIG_ENV_MIN_ENTRIES /* minimum number of entries */
if (htab->table[i].used > 0) {
ENTRY *ep = &htab->table[i].entry;
- free(ep->key);
+ free((void *)ep->key);
free(ep->data);
}
}
* example for functions like hdelete().
*/
+/*
+ * hstrstr_r - return index to entry whose key and/or data contains match
+ */
+int hstrstr_r(const char *match, int last_idx, ENTRY ** retval,
+ struct hsearch_data *htab)
+{
+ unsigned int idx;
+
+ for (idx = last_idx + 1; idx < htab->size; ++idx) {
+ if (htab->table[idx].used <= 0)
+ continue;
+ if (strstr(htab->table[idx].entry.key, match) ||
+ strstr(htab->table[idx].entry.data, match)) {
+ *retval = &htab->table[idx].entry;
+ return idx;
+ }
+ }
+
+ __set_errno(ESRCH);
+ *retval = NULL;
+ return 0;
+}
+
int hmatch_r(const char *match, int last_idx, ENTRY ** retval,
struct hsearch_data *htab)
{
/* free used ENTRY */
debug("hdelete: DELETING key \"%s\"\n", key);
- free(ep->key);
+ free((void *)ep->key);
free(ep->data);
htab->table[idx].used = -1;
* export sorted list of result data
*/
for (i = 0, p = res; i < n; ++i) {
- char *s;
+ const char *s;
s = list[i]->key;
while (*s)
ENTRY e, *rv;
/* skip leading white space */
- while ((*dp == ' ') || (*dp == '\t'))
+ while (isblank(*dp))
++dp;
/* skip comment lines */