[gPXE-devel] [PATCH] [hci] Modify 'set' command to allow space separated values

Aaron Brooks aaron at brooks1.net
Sat Sep 18 09:12:05 EDT 2010


It appears that GMail converted spaces to tabs even though I
specifically checked that the textbox contained tabs before I sent.
Sorry about the annoyance. I'm attaching an identical (albeit tabbed)
version of the patch.

Sincerely,

Aaron

On Fri, Sep 17, 2010 at 6:05 PM, Aaron Brooks <aaron at brooks1.net> wrote:
> At our site we want to be able to store a series of values from a
> single DHCP option (in our case, kernel arguments) in this manner:
>
>    set kargs ${net0/224:string}
>
> I'm including our patch which allows multiple value arguments to the
> 'set' command. This change does not break or affect existing 'set'
> usage but will now make it legal to store space concatenated values.
>
> Let me know if you would like me to change any aspects of the implementation.
>
> I've fully tested the functionality including both error paths.
>
> Sincerely,
>
> Aaron
>
> -------------
> From: Aaron Brooks <aaron at brooks1.net>
> Date: Sun, 12 Sep 2010 22:53:45 -0400
> Subject: [PATCH] [hci] Modify 'set' command to allow space separated values
>
> The 'set' command previously assigned an identifier with the single
> value of the following positional argument. The following would assign
> the value of "bar" to the identifier of "foo"
>
>    set foo bar
>    show foo
>    foo = bar
>
> Providing additional positional arguments would lead to an error.
>
> The modification allows multiple positional arguments (either direct
> or via identifier expansion) to be concatenated with spaces and
> assigned as a single value to the declared identifier "foo":
>
>    set foo bar baz quux
>    show foo
>    foo = bar baz quux
>
> This functionallity was added to allow for multiple, space separated
> values (such as kernel arguments, passed via DHCP) to be assigned to an
> identifier.
>
> Signed-off-by: Aaron Brooks <aaron at brooks1.net>
> ---
>  src/hci/commands/nvo_cmd.c |   41 +++++++++++++++++++++++++++++++++++++----
>  1 files changed, 37 insertions(+), 4 deletions(-)
>
> diff --git a/src/hci/commands/nvo_cmd.c b/src/hci/commands/nvo_cmd.c
> index 5eb2f06..ac18ee3 100644
> --- a/src/hci/commands/nvo_cmd.c
> +++ b/src/hci/commands/nvo_cmd.c
> @@ -30,19 +30,52 @@ static int show_exec ( int argc, char **argv ) {
>  }
>
>  static int set_exec ( int argc, char **argv ) {
> +       char *buf;
> +       int len = 0;
> +       int ofs = 0;
> +       int i;
>        int rc;
>
> -       if ( argc != 3 ) {
> -               printf ( "Syntax: %s <identifier> <value>\n", argv[0] );
> +       if ( argc < 3 ) {
> +               printf ( "Syntax: %s <identifier> <value>...\n", argv[0] );
>                return 1;
>        }
>
> -       if ( ( rc = storef_named_setting ( argv[1], argv[2] ) ) != 0 ) {
> +       /* Compute length of buffer */
> +       for ( i = 2; i < argc; i++ ) {
> +               len += strlen ( argv[i] );
> +               /* For joining space or trailing null */
> +               len += 1;
> +       }
> +
> +       buf = malloc ( len );
> +       if ( ! buf ) {
> +               const char *emsg = strerror ( errno );
> +               printf ( "Could not allocate memory to set \"%s\"=\"", argv[1] );
> +               for ( i = 2; i < (argc - 1); i++ ) {
> +                       printf ( "%s ", argv[i] );
> +               }
> +               printf ( "%s\": %s\n", argv[i], emsg );
> +               return 1;
> +       }
> +
> +       /* Join arguments into buffer with spaces */
> +       for ( i = 2; i < argc; i++ ) {
> +               strcpy ( buf + ofs, argv[i] );
> +               ofs += strlen ( argv[i] );
> +               buf[ofs] = ' ';
> +               ofs += 1;
> +       }
> +       buf[ofs - 1] = '\0';
> +
> +       if ( ( rc = storef_named_setting ( argv[1], buf ) ) != 0 ) {
>                printf ( "Could not set \"%s\"=\"%s\": %s\n",
> -                        argv[1], argv[2], strerror ( rc ) );
> +                        argv[1], buf, strerror ( rc ) );
> +               free ( buf );
>                return 1;
>        }
>
> +       free ( buf );
>        return 0;
>  }
>
> --
> 1.7.0.4
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-hci-Modify-set-command-to-allow-space-separated-valu.patch
Type: text/x-patch
Size: 2643 bytes
Desc: not available
Url : http://etherboot.org/pipermail/gpxe-devel/attachments/20100918/44d913d4/attachment.bin 


More information about the gPXE-devel mailing list