diff options
author | Marc-André Lureau | 2020-01-10 16:30:22 +0100 |
---|---|---|
committer | Paolo Bonzini | 2020-01-24 20:59:13 +0100 |
commit | 164c374b75f87c6765a705c4418ab7005a2d356f (patch) | |
tree | a22061845f7977c11c73fd95977b928e96c30a9b | |
parent | object: make object_class_property_add* return property (diff) | |
download | qemu-164c374b75f87c6765a705c4418ab7005a2d356f.tar.gz qemu-164c374b75f87c6765a705c4418ab7005a2d356f.tar.xz qemu-164c374b75f87c6765a705c4418ab7005a2d356f.zip |
qstring: add qstring_free()
Similar to g_string_free(), optionally return the underlying char*.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20200110153039.1379601-10-marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r-- | include/qapi/qmp/qstring.h | 1 | ||||
-rw-r--r-- | qobject/qstring.c | 27 |
2 files changed, 23 insertions, 5 deletions
diff --git a/include/qapi/qmp/qstring.h b/include/qapi/qmp/qstring.h index 3e83e3a95d..e2e356e5e7 100644 --- a/include/qapi/qmp/qstring.h +++ b/include/qapi/qmp/qstring.h @@ -33,6 +33,7 @@ void qstring_append_int(QString *qstring, int64_t value); void qstring_append(QString *qstring, const char *str); void qstring_append_chr(QString *qstring, int c); bool qstring_is_equal(const QObject *x, const QObject *y); +char *qstring_free(QString *qstring, bool return_str); void qstring_destroy_obj(QObject *obj); #endif /* QSTRING_H */ diff --git a/qobject/qstring.c b/qobject/qstring.c index 1c6897df00..b66a2c35f2 100644 --- a/qobject/qstring.c +++ b/qobject/qstring.c @@ -150,15 +150,32 @@ bool qstring_is_equal(const QObject *x, const QObject *y) } /** + * qstring_free(): Free the memory allocated by a QString object + * + * Return: if @return_str, return the underlying string, to be + * g_free(), otherwise NULL is returned. + */ +char *qstring_free(QString *qstring, bool return_str) +{ + char *rv = NULL; + + if (return_str) { + rv = qstring->string; + } else { + g_free(qstring->string); + } + + g_free(qstring); + + return rv; +} + +/** * qstring_destroy_obj(): Free all memory allocated by a QString * object */ void qstring_destroy_obj(QObject *obj) { - QString *qs; - assert(obj != NULL); - qs = qobject_to(QString, obj); - g_free(qs->string); - g_free(qs); + qstring_free(qobject_to(QString, obj), FALSE); } |