cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

qstring.c (2194B)


      1/*
      2 * QString Module
      3 *
      4 * Copyright (C) 2009 Red Hat Inc.
      5 *
      6 * Authors:
      7 *  Luiz Capitulino <lcapitulino@redhat.com>
      8 *
      9 * 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.
     11 */
     12
     13#include "qemu/osdep.h"
     14#include "qapi/qmp/qstring.h"
     15#include "qobject-internal.h"
     16
     17/**
     18 * 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/**
     28 * qstring_from_substr(): Create a new QString from a C string substring
     29 *
     30 * Return string reference
     31 */
     32QString *qstring_from_substr(const char *str, size_t start, size_t end)
     33{
     34    QString *qstring;
     35
     36    assert(start <= end);
     37    qstring = g_malloc(sizeof(*qstring));
     38    qobject_init(QOBJECT(qstring), QTYPE_QSTRING);
     39    qstring->string = g_strndup(str + start, end - start);
     40    return qstring;
     41}
     42
     43/**
     44 * 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{
     50    return qstring_from_substr(str, 0, strlen(str));
     51}
     52
     53/**
     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);
     65    qstring->string = g_string_free(gstr, false);
     66    return qstring;
     67}
     68
     69
     70/**
     71 * 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/**
     82 * qstring_is_equal(): Test whether the two QStrings are equal
     83 */
     84bool qstring_is_equal(const QObject *x, const QObject *y)
     85{
     86    return !strcmp(qobject_to(QString, x)->string,
     87                   qobject_to(QString, y)->string);
     88}
     89
     90/**
     91 * qstring_destroy_obj(): Free all memory allocated by a QString
     92 * object
     93 */
     94void qstring_destroy_obj(QObject *obj)
     95{
     96    QString *qs;
     97
     98    assert(obj != NULL);
     99    qs = qobject_to(QString, obj);
    100    g_free((char *)qs->string);
    101    g_free(qs);
    102}