Revision 449041d4
b/hw/qdev-properties.c | ||
---|---|---|
67 | 67 |
static int parse_uint8(DeviceState *dev, Property *prop, const char *str) |
68 | 68 |
{ |
69 | 69 |
uint8_t *ptr = qdev_get_prop_ptr(dev, prop); |
70 |
const char *fmt;
|
|
70 |
char *end;
|
|
71 | 71 |
|
72 | 72 |
/* accept both hex and decimal */ |
73 |
fmt = strncasecmp(str, "0x",2) == 0 ? "%" PRIx8 : "%" PRIu8;
|
|
74 |
if (sscanf(str, fmt, ptr) != 1)
|
|
73 |
*ptr = strtoul(str, &end, 0);
|
|
74 |
if ((*end != '\0') || (end == str)) {
|
|
75 | 75 |
return -EINVAL; |
76 |
} |
|
77 |
|
|
76 | 78 |
return 0; |
77 | 79 |
} |
78 | 80 |
|
... | ... | |
95 | 97 |
static int parse_uint16(DeviceState *dev, Property *prop, const char *str) |
96 | 98 |
{ |
97 | 99 |
uint16_t *ptr = qdev_get_prop_ptr(dev, prop); |
98 |
const char *fmt;
|
|
100 |
char *end;
|
|
99 | 101 |
|
100 | 102 |
/* accept both hex and decimal */ |
101 |
fmt = strncasecmp(str, "0x",2) == 0 ? "%" PRIx16 : "%" PRIu16;
|
|
102 |
if (sscanf(str, fmt, ptr) != 1)
|
|
103 |
*ptr = strtoul(str, &end, 0);
|
|
104 |
if ((*end != '\0') || (end == str)) {
|
|
103 | 105 |
return -EINVAL; |
106 |
} |
|
107 |
|
|
104 | 108 |
return 0; |
105 | 109 |
} |
106 | 110 |
|
... | ... | |
123 | 127 |
static int parse_uint32(DeviceState *dev, Property *prop, const char *str) |
124 | 128 |
{ |
125 | 129 |
uint32_t *ptr = qdev_get_prop_ptr(dev, prop); |
126 |
const char *fmt;
|
|
130 |
char *end;
|
|
127 | 131 |
|
128 | 132 |
/* accept both hex and decimal */ |
129 |
fmt = strncasecmp(str, "0x",2) == 0 ? "%" PRIx32 : "%" PRIu32;
|
|
130 |
if (sscanf(str, fmt, ptr) != 1)
|
|
133 |
*ptr = strtoul(str, &end, 0);
|
|
134 |
if ((*end != '\0') || (end == str)) {
|
|
131 | 135 |
return -EINVAL; |
136 |
} |
|
137 |
|
|
132 | 138 |
return 0; |
133 | 139 |
} |
134 | 140 |
|
... | ... | |
149 | 155 |
static int parse_int32(DeviceState *dev, Property *prop, const char *str) |
150 | 156 |
{ |
151 | 157 |
int32_t *ptr = qdev_get_prop_ptr(dev, prop); |
158 |
char *end; |
|
152 | 159 |
|
153 |
if (sscanf(str, "%" PRId32, ptr) != 1) |
|
160 |
*ptr = strtol(str, &end, 10); |
|
161 |
if ((*end != '\0') || (end == str)) { |
|
154 | 162 |
return -EINVAL; |
163 |
} |
|
164 |
|
|
155 | 165 |
return 0; |
156 | 166 |
} |
157 | 167 |
|
... | ... | |
174 | 184 |
static int parse_hex32(DeviceState *dev, Property *prop, const char *str) |
175 | 185 |
{ |
176 | 186 |
uint32_t *ptr = qdev_get_prop_ptr(dev, prop); |
187 |
char *end; |
|
177 | 188 |
|
178 |
if (sscanf(str, "%" PRIx32, ptr) != 1) |
|
189 |
*ptr = strtoul(str, &end, 16); |
|
190 |
if ((*end != '\0') || (end == str)) { |
|
179 | 191 |
return -EINVAL; |
192 |
} |
|
193 |
|
|
180 | 194 |
return 0; |
181 | 195 |
} |
182 | 196 |
|
... | ... | |
199 | 213 |
static int parse_uint64(DeviceState *dev, Property *prop, const char *str) |
200 | 214 |
{ |
201 | 215 |
uint64_t *ptr = qdev_get_prop_ptr(dev, prop); |
202 |
const char *fmt;
|
|
216 |
char *end;
|
|
203 | 217 |
|
204 | 218 |
/* accept both hex and decimal */ |
205 |
fmt = strncasecmp(str, "0x",2) == 0 ? "%" PRIx64 : "%" PRIu64;
|
|
206 |
if (sscanf(str, fmt, ptr) != 1)
|
|
219 |
*ptr = strtoull(str, &end, 0);
|
|
220 |
if ((*end != '\0') || (end == str)) {
|
|
207 | 221 |
return -EINVAL; |
222 |
} |
|
223 |
|
|
208 | 224 |
return 0; |
209 | 225 |
} |
210 | 226 |
|
... | ... | |
227 | 243 |
static int parse_hex64(DeviceState *dev, Property *prop, const char *str) |
228 | 244 |
{ |
229 | 245 |
uint64_t *ptr = qdev_get_prop_ptr(dev, prop); |
246 |
char *end; |
|
230 | 247 |
|
231 |
if (sscanf(str, "%" PRIx64, ptr) != 1) |
|
248 |
*ptr = strtoull(str, &end, 16); |
|
249 |
if ((*end != '\0') || (end == str)) { |
|
232 | 250 |
return -EINVAL; |
251 |
} |
|
252 |
|
|
233 | 253 |
return 0; |
234 | 254 |
} |
235 | 255 |
|
Also available in: Unified diff