vl: allow full-blown QemuOpts syntax for -global
-global does not work for drivers that have a dot in their name, such as cfi.pflash01. This is just a parsing limitation, because such globals can be declared easily inside a -readconfig file. To allow this usage, support the full QemuOpts key/value syntax for -global too, for example "-global driver=cfi.pflash01,property=secure,value=on". The two formats do not conflict, because the key/value syntax does not have a period before the first equal sign. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
		
							parent
							
								
									f71e42a5c9
								
							
						
					
					
						commit
						3751d7c43f
					
				| @ -822,15 +822,19 @@ int qemu_global_option(const char *str) | ||||
|     QemuOpts *opts; | ||||
|     int rc, offset; | ||||
| 
 | ||||
|     rc = sscanf(str, "%63[^.].%63[^=]%n", driver, property, &offset); | ||||
|     if (rc < 2 || str[offset] != '=') { | ||||
|         error_report("can't parse: \"%s\"", str); | ||||
|     rc = sscanf(str, "%63[^.=].%63[^=]%n", driver, property, &offset); | ||||
|     if (rc == 2 && str[offset] == '=') { | ||||
|         opts = qemu_opts_create(&qemu_global_opts, NULL, 0, &error_abort); | ||||
|         qemu_opt_set(opts, "driver", driver, &error_abort); | ||||
|         qemu_opt_set(opts, "property", property, &error_abort); | ||||
|         qemu_opt_set(opts, "value", str + offset + 1, &error_abort); | ||||
|         return 0; | ||||
|     } | ||||
| 
 | ||||
|     opts = qemu_opts_parse(&qemu_global_opts, str, false); | ||||
|     if (!opts) { | ||||
|         return -1; | ||||
|     } | ||||
| 
 | ||||
|     opts = qemu_opts_create(&qemu_global_opts, NULL, 0, &error_abort); | ||||
|     qemu_opt_set(opts, "driver", driver, &error_abort); | ||||
|     qemu_opt_set(opts, "property", property, &error_abort); | ||||
|     qemu_opt_set(opts, "value", str + offset + 1, &error_abort); | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| @ -171,11 +171,13 @@ Set parameter @var{arg} for item @var{id} of type @var{group}\n" | ||||
| ETEXI | ||||
| 
 | ||||
| DEF("global", HAS_ARG, QEMU_OPTION_global, | ||||
|     "-global driver.prop=value\n" | ||||
|     "-global driver.property=value\n" | ||||
|     "-global driver=driver,property=property,value=value\n" | ||||
|     "                set a global default for a driver property\n", | ||||
|     QEMU_ARCH_ALL) | ||||
| STEXI | ||||
| @item -global @var{driver}.@var{prop}=@var{value} | ||||
| @itemx -global driver=@var{driver},property=@var{property},value=@var{value} | ||||
| @findex -global | ||||
| Set default value of @var{driver}'s property @var{prop} to @var{value}, e.g.: | ||||
| 
 | ||||
| @ -186,6 +188,9 @@ qemu-system-i386 -global ide-drive.physical_block_size=4096 -drive file=file,if= | ||||
| In particular, you can use this to set driver properties for devices which are  | ||||
| created automatically by the machine model. To create a device which is not  | ||||
| created automatically and set properties on it, use -@option{device}. | ||||
| 
 | ||||
| The two syntaxes are equivalent.  The longer one works for drivers whose name | ||||
| contains a dot. | ||||
| ETEXI | ||||
| 
 | ||||
| DEF("boot", HAS_ARG, QEMU_OPTION_boot, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Paolo Bonzini
						Paolo Bonzini