diff options
author | Wolfgang Denk <wd@denx.de> | 2011-11-06 22:49:44 +0100 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2011-11-08 13:20:42 +0100 |
commit | 37f2fe7472a34531e7d585eb7e0730b4f8e1f213 (patch) | |
tree | df4a0306161ef740045c011f6847ed50fb47a120 /lib/hashtable.c | |
parent | 5721385b187b3154c7768e6c182501022f4e2e45 (diff) | |
download | u-boot-37f2fe7472a34531e7d585eb7e0730b4f8e1f213.tar.gz u-boot-37f2fe7472a34531e7d585eb7e0730b4f8e1f213.tar.xz u-boot-37f2fe7472a34531e7d585eb7e0730b4f8e1f213.zip |
env: allow to export only selected variables
New syntax:
env export [-t | -b | -c] [-s size] addr [var ...]
With this change it is possible to provide a list of variables names
that shall be exported. Whenno arguments are given, the whole
environment gets exported.
NOTE: The new handling of the "size" argument means a change to the
user API.
Signed-off-by: Wolfgang Denk <wd@denx.de>
Diffstat (limited to 'lib/hashtable.c')
-rw-r--r-- | lib/hashtable.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/hashtable.c b/lib/hashtable.c index 6895550d3c..b7ba3414b0 100644 --- a/lib/hashtable.c +++ b/lib/hashtable.c @@ -478,7 +478,8 @@ static int cmpkey(const void *p1, const void *p2) } ssize_t hexport_r(struct hsearch_data *htab, const char sep, - char **resp, size_t size) + char **resp, size_t size, + int argc, char * const argv[]) { ENTRY *list[htab->size]; char *res, *p; @@ -502,6 +503,16 @@ ssize_t hexport_r(struct hsearch_data *htab, const char sep, if (htab->table[i].used > 0) { ENTRY *ep = &htab->table[i].entry; + int arg, found = 0; + + for (arg = 0; arg < argc; ++arg) { + if (strcmp(argv[arg], ep->key) == 0) { + found = 1; + break; + } + } + if ((argc > 0) && (found == 0)) + continue; list[n++] = ep; @@ -539,7 +550,7 @@ ssize_t hexport_r(struct hsearch_data *htab, const char sep, /* Check if the user supplied buffer size is sufficient */ if (size) { if (size < totlen + 1) { /* provided buffer too small */ - debug("### buffer too small: %d, but need %d\n", + printf("Env export buffer too small: %d, but need %d\n", size, totlen + 1); __set_errno(ENOMEM); return (-1); |