/* * QString Module * * Copyright (C) 2009 Red Hat Inc. * * Authors: * Luiz Capitulino * * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. * See the COPYING.LIB file in the top-level directory. */ #include "qemu/osdep.h" #include "qapi/qmp/qstring.h" #include "qobject-internal.h" /** * qstring_new(): Create a new empty QString * * Return strong reference. */ QString *qstring_new(void) { return qstring_from_str(""); } /** * qstring_from_substr(): Create a new QString from a C string substring * * Return string reference */ QString *qstring_from_substr(const char *str, size_t start, size_t end) { QString *qstring; assert(start <= end); qstring = g_malloc(sizeof(*qstring)); qobject_init(QOBJECT(qstring), QTYPE_QSTRING); qstring->string = g_strndup(str + start, end - start); return qstring; } /** * qstring_from_str(): Create a new QString from a regular C string * * Return strong reference. */ QString *qstring_from_str(const char *str) { return qstring_from_substr(str, 0, strlen(str)); } /** * qstring_from_gstring(): Convert a GString to a QString * * Return strong reference. */ QString *qstring_from_gstring(GString *gstr) { QString *qstring; qstring = g_malloc(sizeof(*qstring)); qobject_init(QOBJECT(qstring), QTYPE_QSTRING); qstring->string = g_string_free(gstr, false); return qstring; } /** * qstring_get_str(): Return a pointer to the stored string * * NOTE: Should be used with caution, if the object is deallocated * this pointer becomes invalid. */ const char *qstring_get_str(const QString *qstring) { return qstring->string; } /** * qstring_is_equal(): Test whether the two QStrings are equal */ bool qstring_is_equal(const QObject *x, const QObject *y) { return !strcmp(qobject_to(QString, x)->string, qobject_to(QString, y)->string); } /** * 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((char *)qs->string); g_free(qs); }