blob: 794f8c93578a831a5feecfc9a0d8dfa50335ff48 [file] [log] [blame]
Luiz Capitulino66f70482009-08-28 15:27:06 -03001/*
Luiz Capitulino41836a92010-05-12 16:34:42 -03002 * QString Module
Luiz Capitulino66f70482009-08-28 15:27:06 -03003 *
4 * Copyright (C) 2009 Red Hat Inc.
5 *
6 * Authors:
7 * Luiz Capitulino <lcapitulino@redhat.com>
8 *
Luiz Capitulino41836a92010-05-12 16:34:42 -03009 * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
10 * See the COPYING.LIB file in the top-level directory.
Luiz Capitulino66f70482009-08-28 15:27:06 -030011 */
Luiz Capitulino41836a92010-05-12 16:34:42 -030012
Peter Maydellf2ad72b2016-01-29 17:50:01 +000013#include "qemu/osdep.h"
Paolo Bonzini7b1b5d12012-12-17 18:19:43 +010014#include "qapi/qmp/qstring.h"
Markus Armbruster80d71122020-12-11 18:11:40 +010015#include "qobject-internal.h"
Luiz Capitulino66f70482009-08-28 15:27:06 -030016
Luiz Capitulino66f70482009-08-28 15:27:06 -030017/**
Anthony Liguorid30ec842009-11-11 10:49:51 -060018 * qstring_new(): Create a new empty QString
19 *
20 * Return strong reference.
21 */
22QString *qstring_new(void)
23{
24 return qstring_from_str("");
25}
26
27/**
Luiz Capitulino4b5c5762009-11-18 23:05:27 -020028 * qstring_from_substr(): Create a new QString from a C string substring
29 *
30 * Return string reference
31 */
liujunjiead63c542018-07-24 21:43:39 +080032QString *qstring_from_substr(const char *str, size_t start, size_t end)
Luiz Capitulino4b5c5762009-11-18 23:05:27 -020033{
34 QString *qstring;
35
Markus Armbrusterba891d62018-07-27 08:22:04 +020036 assert(start <= end);
Anthony Liguori7267c092011-08-20 22:09:37 -050037 qstring = g_malloc(sizeof(*qstring));
Eric Blake55e18192015-12-01 22:20:45 -070038 qobject_init(QOBJECT(qstring), QTYPE_QSTRING);
Markus Armbruster4ac76ba2020-12-11 18:11:52 +010039 qstring->string = g_strndup(str + start, end - start);
Luiz Capitulino4b5c5762009-11-18 23:05:27 -020040 return qstring;
41}
42
43/**
Luiz Capitulino66f70482009-08-28 15:27:06 -030044 * qstring_from_str(): Create a new QString from a regular C string
45 *
46 * Return strong reference.
47 */
48QString *qstring_from_str(const char *str)
49{
Markus Armbrusterba891d62018-07-27 08:22:04 +020050 return qstring_from_substr(str, 0, strlen(str));
Luiz Capitulino66f70482009-08-28 15:27:06 -030051}
52
Markus Armbrusterf1cc1292020-12-11 18:11:36 +010053/**
54 * qstring_from_gstring(): Convert a GString to a QString
55 *
56 * Return strong reference.
57 */
58
59QString *qstring_from_gstring(GString *gstr)
60{
61 QString *qstring;
62
63 qstring = g_malloc(sizeof(*qstring));
64 qobject_init(QOBJECT(qstring), QTYPE_QSTRING);
Markus Armbrusterf1cc1292020-12-11 18:11:36 +010065 qstring->string = g_string_free(gstr, false);
66 return qstring;
67}
68
69
Luiz Capitulino6fe95652009-11-18 23:05:25 -020070/**
Luiz Capitulino66f70482009-08-28 15:27:06 -030071 * qstring_get_str(): Return a pointer to the stored string
72 *
73 * NOTE: Should be used with caution, if the object is deallocated
74 * this pointer becomes invalid.
75 */
76const char *qstring_get_str(const QString *qstring)
77{
78 return qstring->string;
79}
80
81/**
Max Reitzb38dd672017-11-14 19:01:25 +010082 * qstring_is_equal(): Test whether the two QStrings are equal
83 */
84bool qstring_is_equal(const QObject *x, const QObject *y)
85{
Max Reitz7dc847e2018-02-24 16:40:29 +010086 return !strcmp(qobject_to(QString, x)->string,
87 qobject_to(QString, y)->string);
Max Reitzb38dd672017-11-14 19:01:25 +010088}
89
90/**
Luiz Capitulino66f70482009-08-28 15:27:06 -030091 * qstring_destroy_obj(): Free all memory allocated by a QString
92 * object
93 */
Eric Blake55e18192015-12-01 22:20:45 -070094void qstring_destroy_obj(QObject *obj)
Luiz Capitulino66f70482009-08-28 15:27:06 -030095{
Markus Armbruster88e25b12020-12-11 18:11:38 +010096 QString *qs;
97
Luiz Capitulino66f70482009-08-28 15:27:06 -030098 assert(obj != NULL);
Markus Armbruster88e25b12020-12-11 18:11:38 +010099 qs = qobject_to(QString, obj);
Markus Armbruster4ac76ba2020-12-11 18:11:52 +0100100 g_free((char *)qs->string);
Markus Armbruster88e25b12020-12-11 18:11:38 +0100101 g_free(qs);
Luiz Capitulino66f70482009-08-28 15:27:06 -0300102}
Marc-André Lureaud709bbf2022-03-23 19:57:20 +0400103
104void qstring_unref(QString *q)
105{
106 qobject_unref(q);
107}