qdict: Extract qdict_extract_subqdict
Signed-off-by: Benoit Canet <benoit@irqsave.net> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
		
							parent
							
								
									c3e4f43a99
								
							
						
					
					
						commit
						5726d872f3
					
				
							
								
								
									
										23
									
								
								block.c
								
								
								
								
							
							
						
						
									
										23
									
								
								block.c
								
								
								
								
							| 
						 | 
				
			
			@ -1007,25 +1007,6 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp)
 | 
			
		|||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void extract_subqdict(QDict *src, QDict **dst, const char *start)
 | 
			
		||||
{
 | 
			
		||||
    const QDictEntry *entry, *next;
 | 
			
		||||
    const char *p;
 | 
			
		||||
 | 
			
		||||
    *dst = qdict_new();
 | 
			
		||||
    entry = qdict_first(src);
 | 
			
		||||
 | 
			
		||||
    while (entry != NULL) {
 | 
			
		||||
        next = qdict_next(src, entry);
 | 
			
		||||
        if (strstart(entry->key, start, &p)) {
 | 
			
		||||
            qobject_incref(entry->value);
 | 
			
		||||
            qdict_put_obj(*dst, p, entry->value);
 | 
			
		||||
            qdict_del(src, entry->key);
 | 
			
		||||
        }
 | 
			
		||||
        entry = next;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Opens a disk image (raw, qcow2, vmdk, ...)
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -1131,7 +1112,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options,
 | 
			
		|||
        flags |= BDRV_O_ALLOW_RDWR;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    extract_subqdict(options, &file_options, "file.");
 | 
			
		||||
    qdict_extract_subqdict(options, &file_options, "file.");
 | 
			
		||||
 | 
			
		||||
    ret = bdrv_file_open(&file, filename, file_options,
 | 
			
		||||
                         bdrv_open_flags(bs, flags | BDRV_O_UNMAP), &local_err);
 | 
			
		||||
| 
						 | 
				
			
			@ -1169,7 +1150,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options,
 | 
			
		|||
    if ((flags & BDRV_O_NO_BACKING) == 0) {
 | 
			
		||||
        QDict *backing_options;
 | 
			
		||||
 | 
			
		||||
        extract_subqdict(options, &backing_options, "backing.");
 | 
			
		||||
        qdict_extract_subqdict(options, &backing_options, "backing.");
 | 
			
		||||
        ret = bdrv_open_backing_file(bs, backing_options, &local_err);
 | 
			
		||||
        if (ret < 0) {
 | 
			
		||||
            goto close_and_fail;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -67,4 +67,6 @@ const char *qdict_get_try_str(const QDict *qdict, const char *key);
 | 
			
		|||
QDict *qdict_clone_shallow(const QDict *src);
 | 
			
		||||
void qdict_flatten(QDict *qdict);
 | 
			
		||||
 | 
			
		||||
void qdict_extract_subqdict(QDict *src, QDict **dst, const char *start);
 | 
			
		||||
 | 
			
		||||
#endif /* QDICT_H */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -527,3 +527,24 @@ void qdict_flatten(QDict *qdict)
 | 
			
		|||
{
 | 
			
		||||
    qdict_do_flatten(qdict, qdict, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* extract all the src QDict entries starting by start into dst */
 | 
			
		||||
void qdict_extract_subqdict(QDict *src, QDict **dst, const char *start)
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
    const QDictEntry *entry, *next;
 | 
			
		||||
    const char *p;
 | 
			
		||||
 | 
			
		||||
    *dst = qdict_new();
 | 
			
		||||
    entry = qdict_first(src);
 | 
			
		||||
 | 
			
		||||
    while (entry != NULL) {
 | 
			
		||||
        next = qdict_next(src, entry);
 | 
			
		||||
        if (strstart(entry->key, start, &p)) {
 | 
			
		||||
            qobject_incref(entry->value);
 | 
			
		||||
            qdict_put_obj(*dst, p, entry->value);
 | 
			
		||||
            qdict_del(src, entry->key);
 | 
			
		||||
        }
 | 
			
		||||
        entry = next;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue