diff --git a/src/hci/commands/nvo_cmd.c b/src/hci/commands/nvo_cmd.c index 331c3e47..cebb8949 100644 --- a/src/hci/commands/nvo_cmd.c +++ b/src/hci/commands/nvo_cmd.c @@ -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 \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;