mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00
range: Eliminate direct Range member access
Users of struct Range mess liberally with its members, which makes refactoring hard. Create a set of methods, and convert all users to call them instead of accessing members. The methods have carefully worded contracts, and use assertions to check them. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
58e19e6e79
commit
a0efbf1660
9 changed files with 176 additions and 74 deletions
|
@ -59,8 +59,7 @@ static int parse_str(StringInputVisitor *siv, const char *name, Error **errp)
|
|||
if (errno == 0 && endptr > str) {
|
||||
if (*endptr == '\0') {
|
||||
cur = g_malloc0(sizeof(*cur));
|
||||
cur->begin = start;
|
||||
cur->end = start + 1;
|
||||
range_set_bounds(cur, start, start);
|
||||
siv->ranges = range_list_insert(siv->ranges, cur);
|
||||
cur = NULL;
|
||||
str = NULL;
|
||||
|
@ -73,16 +72,14 @@ static int parse_str(StringInputVisitor *siv, const char *name, Error **errp)
|
|||
end < start + 65536)) {
|
||||
if (*endptr == '\0') {
|
||||
cur = g_malloc0(sizeof(*cur));
|
||||
cur->begin = start;
|
||||
cur->end = end + 1;
|
||||
range_set_bounds(cur, start, end);
|
||||
siv->ranges = range_list_insert(siv->ranges, cur);
|
||||
cur = NULL;
|
||||
str = NULL;
|
||||
} else if (*endptr == ',') {
|
||||
str = endptr + 1;
|
||||
cur = g_malloc0(sizeof(*cur));
|
||||
cur->begin = start;
|
||||
cur->end = end + 1;
|
||||
range_set_bounds(cur, start, end);
|
||||
siv->ranges = range_list_insert(siv->ranges, cur);
|
||||
cur = NULL;
|
||||
} else {
|
||||
|
@ -94,8 +91,7 @@ static int parse_str(StringInputVisitor *siv, const char *name, Error **errp)
|
|||
} else if (*endptr == ',') {
|
||||
str = endptr + 1;
|
||||
cur = g_malloc0(sizeof(*cur));
|
||||
cur->begin = start;
|
||||
cur->end = start + 1;
|
||||
range_set_bounds(cur, start, start);
|
||||
siv->ranges = range_list_insert(siv->ranges, cur);
|
||||
cur = NULL;
|
||||
} else {
|
||||
|
@ -134,7 +130,7 @@ start_list(Visitor *v, const char *name, GenericList **list, size_t size,
|
|||
if (siv->cur_range) {
|
||||
Range *r = siv->cur_range->data;
|
||||
if (r) {
|
||||
siv->cur = r->begin;
|
||||
siv->cur = range_lob(r);
|
||||
}
|
||||
*list = g_malloc0(size);
|
||||
} else {
|
||||
|
@ -156,7 +152,7 @@ static GenericList *next_list(Visitor *v, GenericList *tail, size_t size)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if (siv->cur < r->begin || siv->cur >= r->end) {
|
||||
if (!range_contains(r, siv->cur)) {
|
||||
siv->cur_range = g_list_next(siv->cur_range);
|
||||
if (!siv->cur_range) {
|
||||
return NULL;
|
||||
|
@ -165,7 +161,7 @@ static GenericList *next_list(Visitor *v, GenericList *tail, size_t size)
|
|||
if (!r) {
|
||||
return NULL;
|
||||
}
|
||||
siv->cur = r->begin;
|
||||
siv->cur = range_lob(r);
|
||||
}
|
||||
|
||||
tail->next = g_malloc0(size);
|
||||
|
@ -208,7 +204,7 @@ static void parse_type_int64(Visitor *v, const char *name, int64_t *obj,
|
|||
goto error;
|
||||
}
|
||||
|
||||
siv->cur = r->begin;
|
||||
siv->cur = range_lob(r);
|
||||
}
|
||||
|
||||
*obj = siv->cur;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue