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>
This commit is contained in:
Marc-André Lureau 2020-01-10 19:30:22 +04:00 committed by Paolo Bonzini
parent a3a162113e
commit 164c374b75
2 changed files with 23 additions and 5 deletions

View File

@ -33,6 +33,7 @@ void qstring_append_int(QString *qstring, int64_t value);
void qstring_append(QString *qstring, const char *str); void qstring_append(QString *qstring, const char *str);
void qstring_append_chr(QString *qstring, int c); void qstring_append_chr(QString *qstring, int c);
bool qstring_is_equal(const QObject *x, const QObject *y); bool qstring_is_equal(const QObject *x, const QObject *y);
char *qstring_free(QString *qstring, bool return_str);
void qstring_destroy_obj(QObject *obj); void qstring_destroy_obj(QObject *obj);
#endif /* QSTRING_H */ #endif /* QSTRING_H */

View File

@ -149,16 +149,33 @@ bool qstring_is_equal(const QObject *x, const QObject *y)
qobject_to(QString, y)->string); qobject_to(QString, y)->string);
} }
/**
* 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 * qstring_destroy_obj(): Free all memory allocated by a QString
* object * object
*/ */
void qstring_destroy_obj(QObject *obj) void qstring_destroy_obj(QObject *obj)
{ {
QString *qs;
assert(obj != NULL); assert(obj != NULL);
qs = qobject_to(QString, obj); qstring_free(qobject_to(QString, obj), FALSE);
g_free(qs->string);
g_free(qs);
} }