[PATCH 2/5] globalvar: add support to set a value to of all globalvars beginning with 'match'
Jean-Christophe PLAGNIOL-VILLARD
plagnioj at jcrosoft.com
Fri Aug 24 14:51:02 EDT 2012
On 11:08 Fri 24 Aug , Roberto Nibali wrote:
> Hi
>
> > commands/global.c | 58 ++++++++++++++++++++++++++++++++++++++++++++-------
> > common/globalvar.c | 10 +++++++++
> > include/globalvar.h | 3 +++
> > 3 files changed, 64 insertions(+), 7 deletions(-)
> >
> > diff --git a/commands/global.c b/commands/global.c
> > index de6b13e..cb22e63 100644
> > --- a/commands/global.c
> > +++ b/commands/global.c
> > @@ -24,25 +24,26 @@
> > #include <command.h>
> > #include <globalvar.h>
> > #include <environment.h>
> > +#include <getopt.h>
> >
> > -static int do_global(int argc, char *argv[])
> > +static int do_global_add(int argc, char *argv[])
> > {
> > int ret;
> > char *value;
> >
> > - if (argc != 2)
> > + if (argc != 1)
> > return COMMAND_ERROR_USAGE;
> >
> > - value = strchr(argv[1], '=');
> > + value = strchr(argv[0], '=');
> > if (value) {
> > *value = 0;
> > value++;
> > }
> >
> > - ret = globalvar_add_simple(argv[1]);
> > + ret = globalvar_add_simple(argv[0]);
> >
> > if (value) {
> > - char *name = asprintf("global.%s", argv[1]);
> > + char *name = asprintf("global.%s", argv[0]);
> > ret = setenv(name, value);
> > free(name);
> > }
> > @@ -50,13 +51,56 @@ static int do_global(int argc, char *argv[])
> > return ret ? 1 : 0;
> > }
> >
> > +static int do_global_reset(int argc, char *argv[])
> > +{
> > + char *value;
> > +
> > + if (argc != 1)
> > + return COMMAND_ERROR_USAGE;
> > +
> > + value = strchr(argv[0], '=');
> > + if (value) {
> > + *value = 0;
> > + value++;
> > + } else {
> > + value = "";
> > + }
> > +
> > + globalvar_reset_match(argv[0], value);
> > +
> > + return 0;
> > +}
> > +
> > +static int do_global(int argc, char *argv[])
> > +{
> > + int opt;
> > + int do_reset = 0;
> > +
> > + while ((opt = getopt(argc, argv, "r")) > 0) {
> > + switch (opt) {
> > + case 'r':
> > + do_reset = 1;
> > + break;
> > + }
> > + }
> > +
> > + argc -= optind;
> > + argv += optind;
> > +
> > + if (do_reset)
> > + return do_global_reset(argc, argv);
>
> Since I just read the diff, I might fail to see the big picture,
> however, where's the call to globalvar_reset_match(), is it inside
> do_global_reset()?
no can not
you do this
globalvar toto.l=t
globalvar toto=a
so you expect
global.toto.l=t
global.toto=a
and if we you the reset_match
you will have
global.toto.l=a
global.toto=a
>
> > + return do_global_add(argc, argv);
> > +}
> > +
> > BAREBOX_CMD_HELP_START(global)
> > -BAREBOX_CMD_HELP_USAGE("global <var>[=<value]\n")
> > +BAREBOX_CMD_HELP_USAGE("global [-r] <var>[=<value]\n")
> > BAREBOX_CMD_HELP_SHORT("add a new global variable named <var>, optionally set to <value>\n")
> > +BAREBOX_CMD_HELP_SHORT("-r to set a value to of all globalvars beginning with 'match'")
>
> Shouldn't this be REset instead of set? How about:
>
> "-r to reset all matching global variables to a value."
>
> Maybe giving an example could shed some light on the exact syntax of
> the exact kind of matching you had in mind.
it's realy set a value to a list of params
the text in english is clear
Best Regards,
J.
More information about the barebox
mailing list