[gPXE-devel] [PATCH] [hci] Modify 'set' command to allow space separated values
Aaron Brooks
aaron at brooks1.net
Mon Sep 20 23:49:49 EDT 2010
Just a ping to see if anyone has any comments or feedback. :-)
On Sat, Sep 18, 2010 at 9:12 AM, Aaron Brooks <aaron at brooks1.net> wrote:
> 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
>>
>
More information about the gPXE-devel
mailing list