qapi: Factor out common qobject_input_get_keyval()
Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-Id: <1488317230-26248-8-git-send-email-armbru@redhat.com>
This commit is contained in:
		
							parent
							
								
									abe81bc21a
								
							
						
					
					
						commit
						e3934b4297
					
				@ -151,6 +151,28 @@ static QObject *qobject_input_get_object(QObjectInputVisitor *qiv,
 | 
				
			|||||||
    return obj;
 | 
					    return obj;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char *qobject_input_get_keyval(QObjectInputVisitor *qiv,
 | 
				
			||||||
 | 
					                                            const char *name,
 | 
				
			||||||
 | 
					                                            Error **errp)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    QObject *qobj;
 | 
				
			||||||
 | 
					    QString *qstr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    qobj = qobject_input_get_object(qiv, name, true, errp);
 | 
				
			||||||
 | 
					    if (!qobj) {
 | 
				
			||||||
 | 
					        return NULL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    qstr = qobject_to_qstring(qobj);
 | 
				
			||||||
 | 
					    if (!qstr) {
 | 
				
			||||||
 | 
					        error_setg(errp, QERR_INVALID_PARAMETER_TYPE,
 | 
				
			||||||
 | 
					                   full_name(qiv, name), "string");
 | 
				
			||||||
 | 
					        return NULL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return qstring_get_str(qstr);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void qdict_add_key(const char *key, QObject *obj, void *opaque)
 | 
					static void qdict_add_key(const char *key, QObject *obj, void *opaque)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    GHashTable *h = opaque;
 | 
					    GHashTable *h = opaque;
 | 
				
			||||||
@ -343,20 +365,13 @@ static void qobject_input_type_int64_keyval(Visitor *v, const char *name,
 | 
				
			|||||||
                                            int64_t *obj, Error **errp)
 | 
					                                            int64_t *obj, Error **errp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    QObjectInputVisitor *qiv = to_qiv(v);
 | 
					    QObjectInputVisitor *qiv = to_qiv(v);
 | 
				
			||||||
    QObject *qobj = qobject_input_get_object(qiv, name, true, errp);
 | 
					    const char *str = qobject_input_get_keyval(qiv, name, errp);
 | 
				
			||||||
    QString *qstr;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!qobj) {
 | 
					    if (!str) {
 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    qstr = qobject_to_qstring(qobj);
 | 
					 | 
				
			||||||
    if (!qstr) {
 | 
					 | 
				
			||||||
        error_setg(errp, QERR_INVALID_PARAMETER_TYPE,
 | 
					 | 
				
			||||||
                   full_name(qiv, name), "string");
 | 
					 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (qemu_strtoi64(qstring_get_str(qstr), NULL, 0, obj) < 0) {
 | 
					    if (qemu_strtoi64(str, NULL, 0, obj) < 0) {
 | 
				
			||||||
        /* TODO report -ERANGE more nicely */
 | 
					        /* TODO report -ERANGE more nicely */
 | 
				
			||||||
        error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
 | 
					        error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
 | 
				
			||||||
                   full_name(qiv, name), "integer");
 | 
					                   full_name(qiv, name), "integer");
 | 
				
			||||||
@ -388,20 +403,13 @@ static void qobject_input_type_uint64_keyval(Visitor *v, const char *name,
 | 
				
			|||||||
                                             uint64_t *obj, Error **errp)
 | 
					                                             uint64_t *obj, Error **errp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    QObjectInputVisitor *qiv = to_qiv(v);
 | 
					    QObjectInputVisitor *qiv = to_qiv(v);
 | 
				
			||||||
    QObject *qobj = qobject_input_get_object(qiv, name, true, errp);
 | 
					    const char *str = qobject_input_get_keyval(qiv, name, errp);
 | 
				
			||||||
    QString *qstr;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!qobj) {
 | 
					    if (!str) {
 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    qstr = qobject_to_qstring(qobj);
 | 
					 | 
				
			||||||
    if (!qstr) {
 | 
					 | 
				
			||||||
        error_setg(errp, QERR_INVALID_PARAMETER_TYPE,
 | 
					 | 
				
			||||||
                   full_name(qiv, name), "string");
 | 
					 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (qemu_strtou64(qstring_get_str(qstr), NULL, 0, obj) < 0) {
 | 
					    if (qemu_strtou64(str, NULL, 0, obj) < 0) {
 | 
				
			||||||
        /* TODO report -ERANGE more nicely */
 | 
					        /* TODO report -ERANGE more nicely */
 | 
				
			||||||
        error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
 | 
					        error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
 | 
				
			||||||
                   full_name(qiv, name), "integer");
 | 
					                   full_name(qiv, name), "integer");
 | 
				
			||||||
@ -432,21 +440,12 @@ static void qobject_input_type_bool_keyval(Visitor *v, const char *name,
 | 
				
			|||||||
                                           bool *obj, Error **errp)
 | 
					                                           bool *obj, Error **errp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    QObjectInputVisitor *qiv = to_qiv(v);
 | 
					    QObjectInputVisitor *qiv = to_qiv(v);
 | 
				
			||||||
    QObject *qobj = qobject_input_get_object(qiv, name, true, errp);
 | 
					    const char *str = qobject_input_get_keyval(qiv, name, errp);
 | 
				
			||||||
    QString *qstr;
 | 
					 | 
				
			||||||
    const char *str;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!qobj) {
 | 
					    if (!str) {
 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    qstr = qobject_to_qstring(qobj);
 | 
					 | 
				
			||||||
    if (!qstr) {
 | 
					 | 
				
			||||||
        error_setg(errp, QERR_INVALID_PARAMETER_TYPE,
 | 
					 | 
				
			||||||
                   full_name(qiv, name), "string");
 | 
					 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    str = qstring_get_str(qstr);
 | 
					 | 
				
			||||||
    if (!strcmp(str, "on")) {
 | 
					    if (!strcmp(str, "on")) {
 | 
				
			||||||
        *obj = true;
 | 
					        *obj = true;
 | 
				
			||||||
    } else if (!strcmp(str, "off")) {
 | 
					    } else if (!strcmp(str, "off")) {
 | 
				
			||||||
@ -509,22 +508,13 @@ static void qobject_input_type_number_keyval(Visitor *v, const char *name,
 | 
				
			|||||||
                                             double *obj, Error **errp)
 | 
					                                             double *obj, Error **errp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    QObjectInputVisitor *qiv = to_qiv(v);
 | 
					    QObjectInputVisitor *qiv = to_qiv(v);
 | 
				
			||||||
    QObject *qobj = qobject_input_get_object(qiv, name, true, errp);
 | 
					    const char *str = qobject_input_get_keyval(qiv, name, errp);
 | 
				
			||||||
    QString *qstr;
 | 
					 | 
				
			||||||
    const char *str;
 | 
					 | 
				
			||||||
    char *endp;
 | 
					    char *endp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!qobj) {
 | 
					    if (!str) {
 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    qstr = qobject_to_qstring(qobj);
 | 
					 | 
				
			||||||
    if (!qstr) {
 | 
					 | 
				
			||||||
        error_setg(errp, QERR_INVALID_PARAMETER_TYPE,
 | 
					 | 
				
			||||||
                   full_name(qiv, name), "string");
 | 
					 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    str = qstring_get_str(qstr);
 | 
					 | 
				
			||||||
    errno = 0;
 | 
					    errno = 0;
 | 
				
			||||||
    *obj = strtod(str, &endp);
 | 
					    *obj = strtod(str, &endp);
 | 
				
			||||||
    if (errno || endp == str || *endp) {
 | 
					    if (errno || endp == str || *endp) {
 | 
				
			||||||
@ -568,20 +558,13 @@ static void qobject_input_type_size_keyval(Visitor *v, const char *name,
 | 
				
			|||||||
                                           uint64_t *obj, Error **errp)
 | 
					                                           uint64_t *obj, Error **errp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    QObjectInputVisitor *qiv = to_qiv(v);
 | 
					    QObjectInputVisitor *qiv = to_qiv(v);
 | 
				
			||||||
    QObject *qobj = qobject_input_get_object(qiv, name, true, errp);
 | 
					    const char *str = qobject_input_get_keyval(qiv, name, errp);
 | 
				
			||||||
    QString *qstr;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!qobj) {
 | 
					    if (!str) {
 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    qstr = qobject_to_qstring(qobj);
 | 
					 | 
				
			||||||
    if (!qstr) {
 | 
					 | 
				
			||||||
        error_setg(errp, QERR_INVALID_PARAMETER_TYPE,
 | 
					 | 
				
			||||||
                   full_name(qiv, name), "string");
 | 
					 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (qemu_strtosz(qstring_get_str(qstr), NULL, obj) < 0) {
 | 
					    if (qemu_strtosz(str, NULL, obj) < 0) {
 | 
				
			||||||
        /* TODO report -ERANGE more nicely */
 | 
					        /* TODO report -ERANGE more nicely */
 | 
				
			||||||
        error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
 | 
					        error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
 | 
				
			||||||
                   full_name(qiv, name), "size");
 | 
					                   full_name(qiv, name), "size");
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user