166f70487SLuiz Capitulino /*
241836a9fSLuiz Capitulino * QString Module
366f70487SLuiz Capitulino *
466f70487SLuiz Capitulino * Copyright (C) 2009 Red Hat Inc.
566f70487SLuiz Capitulino *
666f70487SLuiz Capitulino * Authors:
766f70487SLuiz Capitulino * Luiz Capitulino <lcapitulino@redhat.com>
866f70487SLuiz Capitulino *
941836a9fSLuiz Capitulino * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
1041836a9fSLuiz Capitulino * See the COPYING.LIB file in the top-level directory.
1166f70487SLuiz Capitulino */
1241836a9fSLuiz Capitulino
13f2ad72b3SPeter Maydell #include "qemu/osdep.h"
14*407bc4bfSDaniel P. Berrangé #include "qobject/qstring.h"
1580d71121SMarkus Armbruster #include "qobject-internal.h"
1666f70487SLuiz Capitulino
1766f70487SLuiz Capitulino /**
18d30ec846SAnthony Liguori * qstring_new(): Create a new empty QString
19d30ec846SAnthony Liguori *
20d30ec846SAnthony Liguori * Return strong reference.
21d30ec846SAnthony Liguori */
qstring_new(void)22d30ec846SAnthony Liguori QString *qstring_new(void)
23d30ec846SAnthony Liguori {
24d30ec846SAnthony Liguori return qstring_from_str("");
25d30ec846SAnthony Liguori }
26d30ec846SAnthony Liguori
27d30ec846SAnthony Liguori /**
284b5c5766SLuiz Capitulino * qstring_from_substr(): Create a new QString from a C string substring
294b5c5766SLuiz Capitulino *
304b5c5766SLuiz Capitulino * Return string reference
314b5c5766SLuiz Capitulino */
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)
334b5c5766SLuiz Capitulino {
344b5c5766SLuiz Capitulino QString *qstring;
354b5c5766SLuiz Capitulino
36ba891d68SMarkus Armbruster assert(start <= end);
377267c094SAnthony Liguori qstring = g_malloc(sizeof(*qstring));
3855e1819cSEric Blake qobject_init(QOBJECT(qstring), QTYPE_QSTRING);
394ac76ba4SMarkus Armbruster qstring->string = g_strndup(str + start, end - start);
404b5c5766SLuiz Capitulino return qstring;
414b5c5766SLuiz Capitulino }
424b5c5766SLuiz Capitulino
434b5c5766SLuiz Capitulino /**
4466f70487SLuiz Capitulino * qstring_from_str(): Create a new QString from a regular C string
4566f70487SLuiz Capitulino *
4666f70487SLuiz Capitulino * Return strong reference.
4766f70487SLuiz Capitulino */
qstring_from_str(const char * str)4866f70487SLuiz Capitulino QString *qstring_from_str(const char *str)
4966f70487SLuiz Capitulino {
50ba891d68SMarkus Armbruster return qstring_from_substr(str, 0, strlen(str));
5166f70487SLuiz Capitulino }
5266f70487SLuiz Capitulino
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
706fe9565cSLuiz Capitulino /**
7166f70487SLuiz Capitulino * qstring_get_str(): Return a pointer to the stored string
7266f70487SLuiz Capitulino *
7366f70487SLuiz Capitulino * NOTE: Should be used with caution, if the object is deallocated
7466f70487SLuiz Capitulino * this pointer becomes invalid.
7566f70487SLuiz Capitulino */
qstring_get_str(const QString * qstring)7666f70487SLuiz Capitulino const char *qstring_get_str(const QString *qstring)
7766f70487SLuiz Capitulino {
7866f70487SLuiz Capitulino return qstring->string;
7966f70487SLuiz Capitulino }
8066f70487SLuiz Capitulino
8166f70487SLuiz Capitulino /**
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 /**
9166f70487SLuiz Capitulino * qstring_destroy_obj(): Free all memory allocated by a QString
9266f70487SLuiz Capitulino * object
9366f70487SLuiz Capitulino */
qstring_destroy_obj(QObject * obj)9455e1819cSEric Blake void qstring_destroy_obj(QObject *obj)
9566f70487SLuiz Capitulino {
9688e25b1eSMarkus Armbruster QString *qs;
9788e25b1eSMarkus Armbruster
9866f70487SLuiz Capitulino assert(obj != NULL);
9988e25b1eSMarkus Armbruster qs = qobject_to(QString, obj);
1004ac76ba4SMarkus Armbruster g_free((char *)qs->string);
10188e25b1eSMarkus Armbruster g_free(qs);
10266f70487SLuiz Capitulino }
103d709bbf3SMarc-André Lureau
qstring_unref(QString * q)104d709bbf3SMarc-André Lureau void qstring_unref(QString *q)
105d709bbf3SMarc-André Lureau {
106d709bbf3SMarc-André Lureau qobject_unref(q);
107d709bbf3SMarc-André Lureau }
108