mirror of https://gitee.com/openkylin/qemu.git
Introduce QString
QString is a high-level data type that can be used to represent C strings. The following functions are available: - qstring_from_str() Create a new QString - qstring_get_str() Get a pointer to the stored string Note that qstring_get_str() is too low-level for a data type like this, but it's interesting for quick read-only accesses. Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
6b8d1ece70
commit
66f7048712
2
Makefile
2
Makefile
|
@ -91,7 +91,7 @@ obj-y += buffered_file.o migration.o migration-tcp.o net.o qemu-sockets.o
|
|||
obj-y += qemu-char.o aio.o net-checksum.o savevm.o
|
||||
obj-y += msmouse.o ps2.o
|
||||
obj-y += qdev.o qdev-properties.o ssi.o
|
||||
obj-y += qint.o
|
||||
obj-y += qint.o qstring.o
|
||||
|
||||
obj-$(CONFIG_BRLAPI) += baum.o
|
||||
obj-$(CONFIG_WIN32) += tap-win32.o
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
typedef enum {
|
||||
QTYPE_NONE,
|
||||
QTYPE_QINT,
|
||||
QTYPE_QSTRING,
|
||||
} qtype_code;
|
||||
|
||||
struct QObject;
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
* QString data type.
|
||||
*
|
||||
* Copyright (C) 2009 Red Hat Inc.
|
||||
*
|
||||
* Authors:
|
||||
* Luiz Capitulino <lcapitulino@redhat.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*/
|
||||
#include "qobject.h"
|
||||
#include "qstring.h"
|
||||
#include "qemu-common.h"
|
||||
|
||||
static const QType qstring_type;
|
||||
|
||||
/**
|
||||
* qstring_from_str(): Create a new QString from a regular C string
|
||||
*
|
||||
* Return strong reference.
|
||||
*/
|
||||
QString *qstring_from_str(const char *str)
|
||||
{
|
||||
QString *qstring;
|
||||
|
||||
qstring = qemu_malloc(sizeof(*qstring));
|
||||
qstring->string = qemu_strdup(str);
|
||||
QOBJECT_INIT(qstring, &qstring_type);
|
||||
|
||||
return qstring;
|
||||
}
|
||||
|
||||
/**
|
||||
* qobject_to_qstring(): Convert a QObject to a QString
|
||||
*/
|
||||
QString *qobject_to_qstring(const QObject *obj)
|
||||
{
|
||||
if (qobject_type(obj) != QTYPE_QSTRING)
|
||||
return NULL;
|
||||
|
||||
return container_of(obj, QString, base);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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_destroy_obj(): Free all memory allocated by a QString
|
||||
* object
|
||||
*/
|
||||
static void qstring_destroy_obj(QObject *obj)
|
||||
{
|
||||
QString *qs;
|
||||
|
||||
assert(obj != NULL);
|
||||
qs = qobject_to_qstring(obj);
|
||||
qemu_free(qs->string);
|
||||
qemu_free(qs);
|
||||
}
|
||||
|
||||
static const QType qstring_type = {
|
||||
.code = QTYPE_QSTRING,
|
||||
.destroy = qstring_destroy_obj,
|
||||
};
|
|
@ -0,0 +1,15 @@
|
|||
#ifndef QSTRING_H
|
||||
#define QSTRING_H
|
||||
|
||||
#include "qobject.h"
|
||||
|
||||
typedef struct QString {
|
||||
QObject_HEAD;
|
||||
char *string;
|
||||
} QString;
|
||||
|
||||
QString *qstring_from_str(const char *str);
|
||||
const char *qstring_get_str(const QString *qstring);
|
||||
QString *qobject_to_qstring(const QObject *obj);
|
||||
|
||||
#endif /* QSTRING_H */
|
Loading…
Reference in New Issue