keyval: Use GString to accumulate value strings

QString supports modifying its string, but it's quite limited: you can
only append.  The remaining callers use it for building an initial
string, never for modifying it later.

Change keyval_parse_one() to do build the initial string with GString.
This is another step towards making QString immutable.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20201211171152.146877-19-armbru@redhat.com>
This commit is contained in:
Markus Armbruster 2020-12-11 18:11:50 +01:00
parent 68af4cc121
commit 7ece42110d

View File

@ -189,7 +189,7 @@ static const char *keyval_parse_one(QDict *qdict, const char *params,
QDict *cur; QDict *cur;
int ret; int ret;
QObject *next; QObject *next;
QString *val; GString *val;
key = params; key = params;
val_end = NULL; val_end = NULL;
@ -263,7 +263,7 @@ static const char *keyval_parse_one(QDict *qdict, const char *params,
if (key == implied_key) { if (key == implied_key) {
assert(!*s); assert(!*s);
val = qstring_from_substr(params, 0, val_end - params); val = g_string_new_len(params, val_end - params);
s = val_end; s = val_end;
if (*s == ',') { if (*s == ',') {
s++; s++;
@ -276,7 +276,7 @@ static const char *keyval_parse_one(QDict *qdict, const char *params,
} }
s++; s++;
val = qstring_new(); val = g_string_new(NULL);
for (;;) { for (;;) {
if (!*s) { if (!*s) {
break; break;
@ -286,11 +286,12 @@ static const char *keyval_parse_one(QDict *qdict, const char *params,
break; break;
} }
} }
qstring_append_chr(val, *s++); g_string_append_c(val, *s++);
} }
} }
if (!keyval_parse_put(cur, key_in_cur, val, key, key_end, errp)) { if (!keyval_parse_put(cur, key_in_cur, qstring_from_gstring(val),
key, key_end, errp)) {
return NULL; return NULL;
} }
return s; return s;