]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[settings] Modify "set" command to allow space separated values
authorMichael Brown <mcb30@ipxe.org>
Tue, 21 Sep 2010 13:54:07 +0000 (14:54 +0100)
committerMichael Brown <mcb30@ipxe.org>
Tue, 21 Sep 2010 13:57:33 +0000 (14:57 +0100)
Allow multiple, space separated values (such as kernel arguments,
passed via DHCP) to be assigned to an identifier using the "set"
command.

Originally-implemented-by: Aaron Brooks <aaron@brooks1.net>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/hci/commands/nvo_cmd.c

index 331c3e4746871b8fb689d53658654a855b6b15d2..cebb8949a70ffd159e8aa2805e651836c9191b8f 100644 (file)
@@ -30,17 +30,37 @@ static int show_exec ( int argc, char **argv ) {
 }
 
 static int set_exec ( int argc, char **argv ) {
+       size_t len;
+       int i;
        int rc;
 
-       if ( argc != 3 ) {
+       if ( argc < 3 ) {
                printf ( "Syntax: %s <identifier> <value>\n", argv[0] );
                return 1;
        }
 
-       if ( ( rc = storef_named_setting ( argv[1], argv[2] ) ) != 0 ) {
-               printf ( "Could not set \"%s\"=\"%s\": %s\n",
-                        argv[1], argv[2], strerror ( rc ) );
-               return 1;
+       /* Determine total length of command line */
+       len = 1; /* NUL */
+       for ( i = 2 ; i < argc ; i++ )
+               len += ( 1 /* possible space */ + strlen ( argv[i] ) );
+
+       {
+               char buf[len];
+               char *ptr = buf;
+
+               /* Assemble command line */
+               buf[0] = '\0';
+               for ( i = 2 ; i < argc ; i++ ) {
+                       ptr += sprintf ( ptr, "%s%s", ( buf[0] ? " " : "" ),
+                                        argv[i] );
+               }
+               assert ( ptr < ( buf + len ) );
+
+               if ( ( rc = storef_named_setting ( argv[1], buf ) ) != 0 ) {
+                       printf ( "Could not set \"%s\"=\"%s\": %s\n",
+                                argv[1], buf, strerror ( rc ) );
+                       return 1;
+               }
        }
 
        return 0;