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:
Luiz Capitulino 2009-08-28 15:27:06 -03:00 committed by Anthony Liguori
parent 6b8d1ece70
commit 66f7048712
4 changed files with 90 additions and 1 deletions

View File

@ -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

View File

@ -38,6 +38,7 @@
typedef enum {
QTYPE_NONE,
QTYPE_QINT,
QTYPE_QSTRING,
} qtype_code;
struct QObject;

73
qstring.c Normal file
View File

@ -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,
};

15
qstring.h Normal file
View File

@ -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 */