[gPXE-devel] [PATCH] [hci] Modify 'set' command to allow space separated values
Marty Connor
mdc at etherboot.org
Tue Sep 21 07:05:34 EDT 2010
Hi Aaron,
Sorry for the delay. Your patch seems useful, thanks for sharing it.
Does anyone have thoughts on Aaron's patch? It seems like a useful
addition to me. Can anyone think of potential problems that supporting
this addition could cause?
Thanks,
/ Marty /
On 9/20/10 11:49 PM, Aaron Brooks wrote:
> 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
>>>
>>
> _______________________________________________
> gPXE-devel mailing list
> gPXE-devel at etherboot.org
> http://etherboot.org/mailman/listinfo/gpxe-devel
More information about the gPXE-devel
mailing list