QemuOpts: Propagate errors through opts_do_parse()
Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
		
							parent
							
								
									f43e47dbf6
								
							
						
					
					
						commit
						d93ae3cfb9
					
				@ -750,8 +750,8 @@ void qemu_opts_print(QemuOpts *opts, const char *sep)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int opts_do_parse(QemuOpts *opts, const char *params,
 | 
					static void opts_do_parse(QemuOpts *opts, const char *params,
 | 
				
			||||||
                         const char *firstname, bool prepend)
 | 
					                          const char *firstname, bool prepend, Error **errp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    char option[128], value[1024];
 | 
					    char option[128], value[1024];
 | 
				
			||||||
    const char *p,*pe,*pc;
 | 
					    const char *p,*pe,*pc;
 | 
				
			||||||
@ -789,21 +789,27 @@ static int opts_do_parse(QemuOpts *opts, const char *params,
 | 
				
			|||||||
            /* store and parse */
 | 
					            /* store and parse */
 | 
				
			||||||
            opt_set(opts, option, value, prepend, &local_err);
 | 
					            opt_set(opts, option, value, prepend, &local_err);
 | 
				
			||||||
            if (local_err) {
 | 
					            if (local_err) {
 | 
				
			||||||
                qerror_report_err(local_err);
 | 
					                error_propagate(errp, local_err);
 | 
				
			||||||
                error_free(local_err);
 | 
					                return;
 | 
				
			||||||
                return -1;
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (*p != ',') {
 | 
					        if (*p != ',') {
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int qemu_opts_do_parse(QemuOpts *opts, const char *params, const char *firstname)
 | 
					int qemu_opts_do_parse(QemuOpts *opts, const char *params, const char *firstname)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return opts_do_parse(opts, params, firstname, false);
 | 
					    Error *err = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    opts_do_parse(opts, params, firstname, false, &err);
 | 
				
			||||||
 | 
					    if (err) {
 | 
				
			||||||
 | 
					        qerror_report_err(err);
 | 
				
			||||||
 | 
					        error_free(err);
 | 
				
			||||||
 | 
					        return -1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static QemuOpts *opts_parse(QemuOptsList *list, const char *params,
 | 
					static QemuOpts *opts_parse(QemuOptsList *list, const char *params,
 | 
				
			||||||
@ -843,7 +849,10 @@ static QemuOpts *opts_parse(QemuOptsList *list, const char *params,
 | 
				
			|||||||
        return NULL;
 | 
					        return NULL;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (opts_do_parse(opts, params, firstname, defaults) != 0) {
 | 
					    opts_do_parse(opts, params, firstname, defaults, &local_err);
 | 
				
			||||||
 | 
					    if (local_err) {
 | 
				
			||||||
 | 
					        qerror_report_err(local_err);
 | 
				
			||||||
 | 
					        error_free(local_err);
 | 
				
			||||||
        qemu_opts_del(opts);
 | 
					        qemu_opts_del(opts);
 | 
				
			||||||
        return NULL;
 | 
					        return NULL;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user