xref: /qemu/qobject/qstring.c (revision d709bbf3)
1a372823aSPaolo Bonzini /*
2a372823aSPaolo Bonzini  * QString Module
3a372823aSPaolo Bonzini  *
4a372823aSPaolo Bonzini  * Copyright (C) 2009 Red Hat Inc.
5a372823aSPaolo Bonzini  *
6a372823aSPaolo Bonzini  * Authors:
7a372823aSPaolo Bonzini  *  Luiz Capitulino <lcapitulino@redhat.com>
8a372823aSPaolo Bonzini  *
9a372823aSPaolo Bonzini  * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
10a372823aSPaolo Bonzini  * See the COPYING.LIB file in the top-level directory.
11a372823aSPaolo Bonzini  */
12a372823aSPaolo Bonzini 
13f2ad72b3SPeter Maydell #include "qemu/osdep.h"
14a372823aSPaolo Bonzini #include "qapi/qmp/qstring.h"
1580d71121SMarkus Armbruster #include "qobject-internal.h"
16a372823aSPaolo Bonzini 
17a372823aSPaolo Bonzini /**
18a372823aSPaolo Bonzini  * qstring_new(): Create a new empty QString
19a372823aSPaolo Bonzini  *
20a372823aSPaolo Bonzini  * Return strong reference.
21a372823aSPaolo Bonzini  */
qstring_new(void)22a372823aSPaolo Bonzini QString *qstring_new(void)
23a372823aSPaolo Bonzini {
24a372823aSPaolo Bonzini     return qstring_from_str("");
25a372823aSPaolo Bonzini }
26a372823aSPaolo Bonzini 
27a372823aSPaolo Bonzini /**
28a372823aSPaolo Bonzini  * qstring_from_substr(): Create a new QString from a C string substring
29a372823aSPaolo Bonzini  *
30a372823aSPaolo Bonzini  * Return string reference
31a372823aSPaolo Bonzini  */
qstring_from_substr(const char * str,size_t start,size_t end)32ad63c549Sliujunjie QString *qstring_from_substr(const char *str, size_t start, size_t end)
33a372823aSPaolo Bonzini {
34a372823aSPaolo Bonzini     QString *qstring;
35a372823aSPaolo Bonzini 
36ba891d68SMarkus Armbruster     assert(start <= end);
37a372823aSPaolo Bonzini     qstring = g_malloc(sizeof(*qstring));
3855e1819cSEric Blake     qobject_init(QOBJECT(qstring), QTYPE_QSTRING);
394ac76ba4SMarkus Armbruster     qstring->string = g_strndup(str + start, end - start);
40a372823aSPaolo Bonzini     return qstring;
41a372823aSPaolo Bonzini }
42a372823aSPaolo Bonzini 
43a372823aSPaolo Bonzini /**
44a372823aSPaolo Bonzini  * qstring_from_str(): Create a new QString from a regular C string
45a372823aSPaolo Bonzini  *
46a372823aSPaolo Bonzini  * Return strong reference.
47a372823aSPaolo Bonzini  */
qstring_from_str(const char * str)48a372823aSPaolo Bonzini QString *qstring_from_str(const char *str)
49a372823aSPaolo Bonzini {
50ba891d68SMarkus Armbruster     return qstring_from_substr(str, 0, strlen(str));
51a372823aSPaolo Bonzini }
52a372823aSPaolo Bonzini 
53f1cc129dSMarkus Armbruster /**
54f1cc129dSMarkus Armbruster  * qstring_from_gstring(): Convert a GString to a QString
55f1cc129dSMarkus Armbruster  *
56f1cc129dSMarkus Armbruster  * Return strong reference.
57f1cc129dSMarkus Armbruster  */
58f1cc129dSMarkus Armbruster 
qstring_from_gstring(GString * gstr)59f1cc129dSMarkus Armbruster QString *qstring_from_gstring(GString *gstr)
60f1cc129dSMarkus Armbruster {
61f1cc129dSMarkus Armbruster     QString *qstring;
62f1cc129dSMarkus Armbruster 
63f1cc129dSMarkus Armbruster     qstring = g_malloc(sizeof(*qstring));
64f1cc129dSMarkus Armbruster     qobject_init(QOBJECT(qstring), QTYPE_QSTRING);
65f1cc129dSMarkus Armbruster     qstring->string = g_string_free(gstr, false);
66f1cc129dSMarkus Armbruster     return qstring;
67f1cc129dSMarkus Armbruster }
68f1cc129dSMarkus Armbruster 
69f1cc129dSMarkus Armbruster 
70a372823aSPaolo Bonzini /**
71a372823aSPaolo Bonzini  * qstring_get_str(): Return a pointer to the stored string
72a372823aSPaolo Bonzini  *
73a372823aSPaolo Bonzini  * NOTE: Should be used with caution, if the object is deallocated
74a372823aSPaolo Bonzini  * this pointer becomes invalid.
75a372823aSPaolo Bonzini  */
qstring_get_str(const QString * qstring)76a372823aSPaolo Bonzini const char *qstring_get_str(const QString *qstring)
77a372823aSPaolo Bonzini {
78a372823aSPaolo Bonzini     return qstring->string;
79a372823aSPaolo Bonzini }
80a372823aSPaolo Bonzini 
81a372823aSPaolo Bonzini /**
82b38dd678SMax Reitz  * qstring_is_equal(): Test whether the two QStrings are equal
83b38dd678SMax Reitz  */
qstring_is_equal(const QObject * x,const QObject * y)84b38dd678SMax Reitz bool qstring_is_equal(const QObject *x, const QObject *y)
85b38dd678SMax Reitz {
867dc847ebSMax Reitz     return !strcmp(qobject_to(QString, x)->string,
877dc847ebSMax Reitz                    qobject_to(QString, y)->string);
88b38dd678SMax Reitz }
89b38dd678SMax Reitz 
90b38dd678SMax Reitz /**
91a372823aSPaolo Bonzini  * qstring_destroy_obj(): Free all memory allocated by a QString
92a372823aSPaolo Bonzini  * object
93a372823aSPaolo Bonzini  */
qstring_destroy_obj(QObject * obj)9455e1819cSEric Blake void qstring_destroy_obj(QObject *obj)
95a372823aSPaolo Bonzini {
9688e25b1eSMarkus Armbruster     QString *qs;
9788e25b1eSMarkus Armbruster 
98a372823aSPaolo Bonzini     assert(obj != NULL);
9988e25b1eSMarkus Armbruster     qs = qobject_to(QString, obj);
1004ac76ba4SMarkus Armbruster     g_free((char *)qs->string);
10188e25b1eSMarkus Armbruster     g_free(qs);
102a372823aSPaolo Bonzini }
103*d709bbf3SMarc-André Lureau 
qstring_unref(QString * q)104*d709bbf3SMarc-André Lureau void qstring_unref(QString *q)
105*d709bbf3SMarc-André Lureau {
106*d709bbf3SMarc-André Lureau     qobject_unref(q);
107*d709bbf3SMarc-André Lureau }
108