Make fw_cfg a slice

Signed-off-by: Salvatore Mazzarino <dev@mazzarino.cz>
This commit is contained in:
Salvatore Mazzarino 2020-10-12 12:29:05 +02:00
parent 546cc55ea4
commit 8cb8b24c05
2 changed files with 29 additions and 23 deletions

View File

@ -2133,20 +2133,22 @@ func (fwcfg FwCfg) QemuParams(config *Config) []string {
var fwcfgParams []string var fwcfgParams []string
var qemuParams []string var qemuParams []string
if config.FwCfg.Name != "" { for _, f := range config.FwCfg {
fwcfgParams = append(fwcfgParams, fmt.Sprintf("name=%q", config.FwCfg.Name)) if f.Name != "" {
fwcfgParams = append(fwcfgParams, fmt.Sprintf("name=%s", f.Name))
if config.FwCfg.File != "" { if f.File != "" {
fwcfgParams = append(fwcfgParams, fmt.Sprintf(",file=%q", config.FwCfg.File)) fwcfgParams = append(fwcfgParams, fmt.Sprintf(",file=%s", f.File))
} }
if config.FwCfg.Str != "" { if f.Str != "" {
fwcfgParams = append(fwcfgParams, fmt.Sprintf(",string=%q", config.FwCfg.Str)) fwcfgParams = append(fwcfgParams, fmt.Sprintf(",string=%s", f.Str))
} }
} }
qemuParams = append(qemuParams, "-fw_cfg") qemuParams = append(qemuParams, "-fw_cfg")
qemuParams = append(qemuParams, strings.Join(fwcfgParams, "")) qemuParams = append(qemuParams, strings.Join(fwcfgParams, ""))
}
return qemuParams return qemuParams
} }
@ -2285,7 +2287,7 @@ type Config struct {
fds []*os.File fds []*os.File
// FwCfg is the -fw_cfg parameter // FwCfg is the -fw_cfg parameter
FwCfg FwCfg FwCfg []FwCfg
IOThreads []IOThread IOThreads []IOThread
@ -2624,12 +2626,14 @@ func (config *Config) appendFwCfg(logger QMPLog) {
logger = qmpNullLogger{} logger = qmpNullLogger{}
} }
if !config.FwCfg.Valid() { for _, f := range config.FwCfg {
if !f.Valid() {
logger.Errorf("fw_cfg is not valid: %+v", config.FwCfg) logger.Errorf("fw_cfg is not valid: %+v", config.FwCfg)
return continue
} }
config.qemuParams = append(config.qemuParams, config.FwCfg.QemuParams(config)...) config.qemuParams = append(config.qemuParams, f.QemuParams(config)...)
}
} }
// LaunchQemu can be used to launch a new qemu instance. // LaunchQemu can be used to launch a new qemu instance.

View File

@ -45,7 +45,7 @@ func testConfigAppend(config *Config, structure interface{}, expected string, t
config.Machine = s config.Machine = s
config.appendMachine() config.appendMachine()
case FwCfg: case FwCfg:
config.FwCfg = s config.FwCfg = []FwCfg{s}
config.appendFwCfg(nil) config.appendFwCfg(nil)
case Device: case Device:
@ -1152,11 +1152,13 @@ func TestBadFwcfg(t *testing.T) {
} }
c = &Config{ c = &Config{
FwCfg: FwCfg{ FwCfg: []FwCfg{
{
Name: "name=opt/com.mycompany/blob", Name: "name=opt/com.mycompany/blob",
File: "./my_blob.bin", File: "./my_blob.bin",
Str: "foo", Str: "foo",
}, },
},
} }
c.appendFwCfg(nil) c.appendFwCfg(nil)
if len(c.qemuParams) != 0 { if len(c.qemuParams) != 0 {
@ -1189,14 +1191,14 @@ func TestIommu(t *testing.T) {
} }
func TestAppendFwcfg(t *testing.T) { func TestAppendFwcfg(t *testing.T) {
fwcfgString := "-fw_cfg name=\"opt/com.mycompany/blob\",file=\"./my_blob.bin\"" fwcfgString := "-fw_cfg name=opt/com.mycompany/blob,file=./my_blob.bin"
fwcfg := FwCfg{ fwcfg := FwCfg{
Name: "opt/com.mycompany/blob", Name: "opt/com.mycompany/blob",
File: "./my_blob.bin", File: "./my_blob.bin",
} }
testAppend(fwcfg, fwcfgString, t) testAppend(fwcfg, fwcfgString, t)
fwcfgString = "-fw_cfg name=\"opt/com.mycompany/blob\",string=\"foo\"" fwcfgString = "-fw_cfg name=opt/com.mycompany/blob,string=foo"
fwcfg = FwCfg{ fwcfg = FwCfg{
Name: "opt/com.mycompany/blob", Name: "opt/com.mycompany/blob",
Str: "foo", Str: "foo",