Commit 62c5802efdabe2a24ca9680a1ab9dcbbfbaf43d2
Committed by
Anthony Liguori
1 parent
3b0ba927
move parser functions from vl.c to qemu-option.c
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Showing
4 changed files
with
71 additions
and
71 deletions
qemu-option.c
| @@ -85,6 +85,70 @@ const char *get_opt_value(char *buf, int buf_size, const char *p) | @@ -85,6 +85,70 @@ const char *get_opt_value(char *buf, int buf_size, const char *p) | ||
| 85 | return p; | 85 | return p; |
| 86 | } | 86 | } |
| 87 | 87 | ||
| 88 | +int get_next_param_value(char *buf, int buf_size, | ||
| 89 | + const char *tag, const char **pstr) | ||
| 90 | +{ | ||
| 91 | + const char *p; | ||
| 92 | + char option[128]; | ||
| 93 | + | ||
| 94 | + p = *pstr; | ||
| 95 | + for(;;) { | ||
| 96 | + p = get_opt_name(option, sizeof(option), p, '='); | ||
| 97 | + if (*p != '=') | ||
| 98 | + break; | ||
| 99 | + p++; | ||
| 100 | + if (!strcmp(tag, option)) { | ||
| 101 | + *pstr = get_opt_value(buf, buf_size, p); | ||
| 102 | + if (**pstr == ',') { | ||
| 103 | + (*pstr)++; | ||
| 104 | + } | ||
| 105 | + return strlen(buf); | ||
| 106 | + } else { | ||
| 107 | + p = get_opt_value(NULL, 0, p); | ||
| 108 | + } | ||
| 109 | + if (*p != ',') | ||
| 110 | + break; | ||
| 111 | + p++; | ||
| 112 | + } | ||
| 113 | + return 0; | ||
| 114 | +} | ||
| 115 | + | ||
| 116 | +int get_param_value(char *buf, int buf_size, | ||
| 117 | + const char *tag, const char *str) | ||
| 118 | +{ | ||
| 119 | + return get_next_param_value(buf, buf_size, tag, &str); | ||
| 120 | +} | ||
| 121 | + | ||
| 122 | +int check_params(char *buf, int buf_size, | ||
| 123 | + const char * const *params, const char *str) | ||
| 124 | +{ | ||
| 125 | + const char *p; | ||
| 126 | + int i; | ||
| 127 | + | ||
| 128 | + p = str; | ||
| 129 | + while (*p != '\0') { | ||
| 130 | + p = get_opt_name(buf, buf_size, p, '='); | ||
| 131 | + if (*p != '=') { | ||
| 132 | + return -1; | ||
| 133 | + } | ||
| 134 | + p++; | ||
| 135 | + for (i = 0; params[i] != NULL; i++) { | ||
| 136 | + if (!strcmp(params[i], buf)) { | ||
| 137 | + break; | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | + if (params[i] == NULL) { | ||
| 141 | + return -1; | ||
| 142 | + } | ||
| 143 | + p = get_opt_value(NULL, 0, p); | ||
| 144 | + if (*p != ',') { | ||
| 145 | + break; | ||
| 146 | + } | ||
| 147 | + p++; | ||
| 148 | + } | ||
| 149 | + return 0; | ||
| 150 | +} | ||
| 151 | + | ||
| 88 | /* | 152 | /* |
| 89 | * Searches an option list for an option with the given name | 153 | * Searches an option list for an option with the given name |
| 90 | */ | 154 | */ |
qemu-option.h
| @@ -46,6 +46,12 @@ typedef struct QEMUOptionParameter { | @@ -46,6 +46,12 @@ typedef struct QEMUOptionParameter { | ||
| 46 | 46 | ||
| 47 | const char *get_opt_name(char *buf, int buf_size, const char *p, char delim); | 47 | const char *get_opt_name(char *buf, int buf_size, const char *p, char delim); |
| 48 | const char *get_opt_value(char *buf, int buf_size, const char *p); | 48 | const char *get_opt_value(char *buf, int buf_size, const char *p); |
| 49 | +int get_next_param_value(char *buf, int buf_size, | ||
| 50 | + const char *tag, const char **pstr); | ||
| 51 | +int get_param_value(char *buf, int buf_size, | ||
| 52 | + const char *tag, const char *str); | ||
| 53 | +int check_params(char *buf, int buf_size, | ||
| 54 | + const char * const *params, const char *str); | ||
| 49 | 55 | ||
| 50 | 56 | ||
| 51 | /* | 57 | /* |
sysemu.h
| @@ -3,6 +3,7 @@ | @@ -3,6 +3,7 @@ | ||
| 3 | /* Misc. things related to the system emulator. */ | 3 | /* Misc. things related to the system emulator. */ |
| 4 | 4 | ||
| 5 | #include "qemu-common.h" | 5 | #include "qemu-common.h" |
| 6 | +#include "qemu-option.h" | ||
| 6 | #include "sys-queue.h" | 7 | #include "sys-queue.h" |
| 7 | 8 | ||
| 8 | #ifdef _WIN32 | 9 | #ifdef _WIN32 |
| @@ -276,13 +277,6 @@ void do_usb_add(Monitor *mon, const char *devname); | @@ -276,13 +277,6 @@ void do_usb_add(Monitor *mon, const char *devname); | ||
| 276 | void do_usb_del(Monitor *mon, const char *devname); | 277 | void do_usb_del(Monitor *mon, const char *devname); |
| 277 | void usb_info(Monitor *mon); | 278 | void usb_info(Monitor *mon); |
| 278 | 279 | ||
| 279 | -int get_param_value(char *buf, int buf_size, | ||
| 280 | - const char *tag, const char *str); | ||
| 281 | -int get_next_param_value(char *buf, int buf_size, | ||
| 282 | - const char *tag, const char **pstr); | ||
| 283 | -int check_params(char *buf, int buf_size, | ||
| 284 | - const char * const *params, const char *str); | ||
| 285 | - | ||
| 286 | void register_devices(void); | 280 | void register_devices(void); |
| 287 | 281 | ||
| 288 | #endif | 282 | #endif |
vl.c
| @@ -1599,70 +1599,6 @@ static int socket_init(void) | @@ -1599,70 +1599,6 @@ static int socket_init(void) | ||
| 1599 | } | 1599 | } |
| 1600 | #endif | 1600 | #endif |
| 1601 | 1601 | ||
| 1602 | -int get_next_param_value(char *buf, int buf_size, | ||
| 1603 | - const char *tag, const char **pstr) | ||
| 1604 | -{ | ||
| 1605 | - const char *p; | ||
| 1606 | - char option[128]; | ||
| 1607 | - | ||
| 1608 | - p = *pstr; | ||
| 1609 | - for(;;) { | ||
| 1610 | - p = get_opt_name(option, sizeof(option), p, '='); | ||
| 1611 | - if (*p != '=') | ||
| 1612 | - break; | ||
| 1613 | - p++; | ||
| 1614 | - if (!strcmp(tag, option)) { | ||
| 1615 | - *pstr = get_opt_value(buf, buf_size, p); | ||
| 1616 | - if (**pstr == ',') { | ||
| 1617 | - (*pstr)++; | ||
| 1618 | - } | ||
| 1619 | - return strlen(buf); | ||
| 1620 | - } else { | ||
| 1621 | - p = get_opt_value(NULL, 0, p); | ||
| 1622 | - } | ||
| 1623 | - if (*p != ',') | ||
| 1624 | - break; | ||
| 1625 | - p++; | ||
| 1626 | - } | ||
| 1627 | - return 0; | ||
| 1628 | -} | ||
| 1629 | - | ||
| 1630 | -int get_param_value(char *buf, int buf_size, | ||
| 1631 | - const char *tag, const char *str) | ||
| 1632 | -{ | ||
| 1633 | - return get_next_param_value(buf, buf_size, tag, &str); | ||
| 1634 | -} | ||
| 1635 | - | ||
| 1636 | -int check_params(char *buf, int buf_size, | ||
| 1637 | - const char * const *params, const char *str) | ||
| 1638 | -{ | ||
| 1639 | - const char *p; | ||
| 1640 | - int i; | ||
| 1641 | - | ||
| 1642 | - p = str; | ||
| 1643 | - while (*p != '\0') { | ||
| 1644 | - p = get_opt_name(buf, buf_size, p, '='); | ||
| 1645 | - if (*p != '=') { | ||
| 1646 | - return -1; | ||
| 1647 | - } | ||
| 1648 | - p++; | ||
| 1649 | - for (i = 0; params[i] != NULL; i++) { | ||
| 1650 | - if (!strcmp(params[i], buf)) { | ||
| 1651 | - break; | ||
| 1652 | - } | ||
| 1653 | - } | ||
| 1654 | - if (params[i] == NULL) { | ||
| 1655 | - return -1; | ||
| 1656 | - } | ||
| 1657 | - p = get_opt_value(NULL, 0, p); | ||
| 1658 | - if (*p != ',') { | ||
| 1659 | - break; | ||
| 1660 | - } | ||
| 1661 | - p++; | ||
| 1662 | - } | ||
| 1663 | - return 0; | ||
| 1664 | -} | ||
| 1665 | - | ||
| 1666 | /***********************************************************/ | 1602 | /***********************************************************/ |
| 1667 | /* Bluetooth support */ | 1603 | /* Bluetooth support */ |
| 1668 | static int nb_hcis; | 1604 | static int nb_hcis; |