aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2010-12-17 16:51:59 -0500
committerWolfgang Denk <wd@denx.de>2011-01-09 17:57:37 +0100
commit560d424b6d7cd4205b062ad95f1b104bd4f8bcc3 (patch)
tree5a429e36ad18a8fa2e0b026d143c38d7f3d493af /lib
parent42df1e1618f2bcae308ad193a136b72b82103bea (diff)
downloadu-boot-linaro-stable-560d424b6d7cd4205b062ad95f1b104bd4f8bcc3.tar.gz
env: re-add support for auto-completion
Currently, only basic completion is supported (no globs), but this is what we had previously. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/hashtable.c20
-rw-r--r--lib/qsort.c6
2 files changed, 26 insertions, 0 deletions
diff --git a/lib/hashtable.c b/lib/hashtable.c
index b47f3b69b..9f069c076 100644
--- a/lib/hashtable.c
+++ b/lib/hashtable.c
@@ -202,6 +202,26 @@ void hdestroy_r(struct hsearch_data *htab)
* example for functions like hdelete().
*/
+int hmatch_r(const char *match, int last_idx, ENTRY ** retval,
+ struct hsearch_data *htab)
+{
+ unsigned int idx;
+ size_t key_len = strlen(match);
+
+ for (idx = last_idx + 1; idx < htab->size; ++idx) {
+ if (!htab->table[idx].used)
+ continue;
+ if (!strncmp(match, htab->table[idx].entry.key, key_len)) {
+ *retval = &htab->table[idx].entry;
+ return idx;
+ }
+ }
+
+ __set_errno(ESRCH);
+ *retval = NULL;
+ return 0;
+}
+
int hsearch_r(ENTRY item, ACTION action, ENTRY ** retval,
struct hsearch_data *htab)
{
diff --git a/lib/qsort.c b/lib/qsort.c
index e771dcfcf..1cc0d31c9 100644
--- a/lib/qsort.c
+++ b/lib/qsort.c
@@ -16,6 +16,7 @@
* bcc and gcc. */
#include <linux/types.h>
+#include <exports.h>
#if 0
#include <assert.h>
#else
@@ -67,3 +68,8 @@ void qsort(void *base,
} while (wgap);
}
}
+
+int strcmp_compar(const void *p1, const void *p2)
+{
+ return strcmp(*(const char **)p1, *(const char **)p2);
+}