Re: [U-Boot] [PATCH] env: allow to export only selected variables

2011-11-17 Thread Wolfgang Denk
Dear Gerlando Falauto,

In message <4ec55b4f.4060...@keymile.com> you wrote:
> 
> >   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;
> 
> What happened to "please indent with TABs only"?
> Have I missed something, perhaps?

Yes, you missed this error in the initial code review :-)

[Unfortunaltely I haven't found yet a way to convince Lindent or
similar to use only TABs in places like that. Hints welcome.]

Please feel free to submit cleanup-patches.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de
Wenn das dann in die Hose geht, nehme ich es auf meine Kappe.
 -- Rudi Völler, 15. Nov 2003
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH] env: allow to export only selected variables

2011-11-17 Thread Gerlando Falauto
Dear Wolfgang Denk,

> --- a/include/search.h
> +++ b/include/search.h
> @@ -91,7 +91,8 @@ extern int hstrstr_r(const char *__match, int __last_idx, 
> ENTRY ** __retval,
>   extern int hdelete_r(const char *__key, struct hsearch_data *__htab);
>
>   extern ssize_t hexport_r(struct hsearch_data *__htab,
> -  const char __sep, char **__resp, size_t __size);
> +  const char __sep, char **__resp, size_t __size,
> +  int argc, char * const argv[]);
>
>   extern int himport_r(struct hsearch_data *__htab,
>const char *__env, size_t __size, const char __sep,
> diff --git a/lib/hashtable.c b/lib/hashtable.c
> index 6895550..b7ba341 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;

What happened to "please indent with TABs only"?
Have I missed something, perhaps?

Thank you,
Gerlando Falauto
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH] env: allow to export only selected variables

2011-11-17 Thread Gerlando Falauto
Dear Wolfgang Denk,

> --- a/common/cmd_nvedit.c
> +++ b/common/cmd_nvedit.c
> @@ -125,7 +125,7 @@ static int env_print(char *name)
>   }
>
>   /* print whole list */
> - len = hexport_r(&env_htab, '\n',&res, 0);
> + len = hexport_r(&env_htab, '\n',&res, 0, 0, NULL);
>
>   if (len>  0) {
>   puts(res);

Here you extended the function signature by adding 2 new arguments and 
therefore you had to touch 12 existing function calls so to add the 
default values for the new args.

In my previous patches, I had renamed the sibling himport_r() function 
to himport_ex() with the 2 extra args and reimplemented himport_r() as a 
wrapper, so to maintain compatibility with the existing code.
Just to realize now that, after some reworking, there is only one 
function call to the original himport_r() left.
I'm going to get rid of this renaming.

I mean: completely opposite approaches... funny, huh?

Best,
Gerlando Falauto
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH] env: allow to export only selected variables

2011-11-08 Thread Wolfgang Denk
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 
---
 common/cmd_nvedit.c|   33 +
 common/env_dataflash.c |2 +-
 common/env_eeprom.c|2 +-
 common/env_flash.c |4 ++--
 common/env_mmc.c   |2 +-
 common/env_nand.c  |4 ++--
 common/env_nvram.c |2 +-
 common/env_onenand.c   |2 +-
 common/env_sf.c|4 ++--
 include/search.h   |3 ++-
 lib/hashtable.c|   15 +--
 11 files changed, 47 insertions(+), 26 deletions(-)

diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c
index 396a171..7194ade 100644
--- a/common/cmd_nvedit.c
+++ b/common/cmd_nvedit.c
@@ -125,7 +125,7 @@ static int env_print(char *name)
}
 
/* print whole list */
-   len = hexport_r(&env_htab, '\n', &res, 0);
+   len = hexport_r(&env_htab, '\n', &res, 0, 0, NULL);
 
if (len > 0) {
puts(res);
@@ -647,7 +647,7 @@ static int do_env_delete(cmd_tbl_t *cmdtp, int flag, int 
argc, char * const argv
 
 #ifdef CONFIG_CMD_EXPORTENV
 /*
- * env export [-t | -b | -c] addr [size]
+ * env export [-t | -b | -c] [-s size] addr [var ...]
  * -t: export as text format; if size is given, data will be
  * padded with '\0' bytes; if not, one terminating '\0'
  * will be added (which is included in the "filesize"
@@ -657,8 +657,12 @@ static int do_env_delete(cmd_tbl_t *cmdtp, int flag, int 
argc, char * const argv
  * '\0', list end marked by double "\0\0")
  * -c: export as checksum protected environment format as
  * used for example by "saveenv" command
+ * -s size:
+ * size of output buffer
  * addr:   memory address where environment gets stored
- * size:   size of output buffer
+ * var...  List of variable names that get included into the
+ * export. Without arguments, the whole environment gets
+ * exported.
  *
  * With "-c" and size is NOT given, then the export command will
  * format the data as currently used for the persistent storage,
@@ -691,7 +695,7 @@ static int do_env_export(cmd_tbl_t *cmdtp, int flag, int 
argc, char * const argv
 {
charbuf[32];
char*addr, *cmd, *res;
-   size_t  size;
+   size_t  size = 0;
ssize_t len;
env_t   *envp;
charsep = '\n';
@@ -715,6 +719,11 @@ static int do_env_export(cmd_tbl_t *cmdtp, int flag, int 
argc, char * const argv
sep = '\0';
chk = 1;
break;
+   case 's':   /* size given */
+   if (--argc <= 0)
+   return cmd_usage(cmdtp);
+   size = simple_strtoul(*++argv, NULL, 16);
+   goto NXTARG;
case 't':   /* text format */
if (fmt++)
goto sep_err;
@@ -724,6 +733,7 @@ static int do_env_export(cmd_tbl_t *cmdtp, int flag, int 
argc, char * const argv
return cmd_usage(cmdtp);
}
}
+NXTARG:;
}
 
if (argc < 1)
@@ -731,15 +741,14 @@ static int do_env_export(cmd_tbl_t *cmdtp, int flag, int 
argc, char * const argv
 
addr = (char *)simple_strtoul(argv[0], NULL, 16);
 
-   if (argc == 2) {
-   size = simple_strtoul(argv[1], NULL, 16);
+   if (size)
memset(addr, '\0', size);
-   } else {
-   size = 0;
-   }
+
+   argc--;
+   argv++;
 
if (sep) {  /* export as text file */
-   len = hexport_r(&env_htab, sep, &addr, size);
+   len = hexport_r(&env_htab, sep, &addr, size, argc, argv);
if (len < 0) {
error("Cannot export environment: errno = %d\n",
errno);
@@ -758,7 +767,7 @@ static int do_env_export(cmd_tbl_t *cmdtp, int flag, int 
argc, char * const argv
else/* export as raw binary data */
res = addr;
 
-   len = hexport_r(&env_htab, '\0', &res, ENV_SIZE);
+   len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, argc, argv);
if (len < 0) {
error("Cannot export environment: errno = %d\n",
errno);
@@ -965,7 +974,7 @@ U_BOOT_CMD(
 #if defined(CONFIG_CMD_EDITENV)
"env edit name - edit environment variable\n"
 #endif
-   "env export [-t | -b | -c] addr [size] - export environm