qemu-option: has_help_option() and is_valid_option_list()
has_help_option() checks if any help option ('help' or '?') occurs
anywhere in an option string, so that things like 'cluster_size=4k,help'
are recognised.
is_valid_option_list() ensures that the option list doesn't have options
with leading commas or trailing unescaped commas.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Jeff Cody <jcody@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
			
			
This commit is contained in:
		
							parent
							
								
									5b7aa9b56d
								
							
						
					
					
						commit
						7cc07ab8da
					
				@ -79,6 +79,8 @@ void parse_option_size(const char *name, const char *value,
 | 
				
			|||||||
void free_option_parameters(QEMUOptionParameter *list);
 | 
					void free_option_parameters(QEMUOptionParameter *list);
 | 
				
			||||||
void print_option_parameters(QEMUOptionParameter *list);
 | 
					void print_option_parameters(QEMUOptionParameter *list);
 | 
				
			||||||
void print_option_help(QEMUOptionParameter *list);
 | 
					void print_option_help(QEMUOptionParameter *list);
 | 
				
			||||||
 | 
					bool has_help_option(const char *param);
 | 
				
			||||||
 | 
					bool is_valid_option_list(const char *param);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ------------------------------------------------------------------ */
 | 
					/* ------------------------------------------------------------------ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -450,6 +450,55 @@ fail:
 | 
				
			|||||||
    return NULL;
 | 
					    return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool has_help_option(const char *param)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    size_t buflen = strlen(param) + 1;
 | 
				
			||||||
 | 
					    char *buf = g_malloc0(buflen);
 | 
				
			||||||
 | 
					    const char *p = param;
 | 
				
			||||||
 | 
					    bool result = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    while (*p) {
 | 
				
			||||||
 | 
					        p = get_opt_value(buf, buflen, p);
 | 
				
			||||||
 | 
					        if (*p) {
 | 
				
			||||||
 | 
					            p++;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (is_help_option(buf)) {
 | 
				
			||||||
 | 
					            result = true;
 | 
				
			||||||
 | 
					            goto out;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					out:
 | 
				
			||||||
 | 
					    free(buf);
 | 
				
			||||||
 | 
					    return result;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool is_valid_option_list(const char *param)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    size_t buflen = strlen(param) + 1;
 | 
				
			||||||
 | 
					    char *buf = g_malloc0(buflen);
 | 
				
			||||||
 | 
					    const char *p = param;
 | 
				
			||||||
 | 
					    bool result = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    while (*p) {
 | 
				
			||||||
 | 
					        p = get_opt_value(buf, buflen, p);
 | 
				
			||||||
 | 
					        if (*p && !*++p) {
 | 
				
			||||||
 | 
					            result = false;
 | 
				
			||||||
 | 
					            goto out;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!*buf || *buf == ',') {
 | 
				
			||||||
 | 
					            result = false;
 | 
				
			||||||
 | 
					            goto out;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					out:
 | 
				
			||||||
 | 
					    free(buf);
 | 
				
			||||||
 | 
					    return result;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Prints all options of a list that have a value to stdout
 | 
					 * Prints all options of a list that have a value to stdout
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user