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 | |
| parent | 5721385b187b3154c7768e6c182501022f4e2e45 (diff) | |
| download | olio-uboot-2014.01-37f2fe7472a34531e7d585eb7e0730b4f8e1f213.tar.xz olio-uboot-2014.01-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')
| -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 6895550d3..b7ba3414b 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); |