qstring.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. #include "qemu/osdep.h"
  13. #include "qapi/qmp/qstring.h"
  14. #include "qobject-internal.h"
  15. /**
  16. * qstring_new(): Create a new empty QString
  17. *
  18. * Return strong reference.
  19. */
  20. QString *qstring_new(void)
  21. {
  22. return qstring_from_str("");
  23. }
  24. /**
  25. * qstring_from_substr(): Create a new QString from a C string substring
  26. *
  27. * Return string reference
  28. */
  29. QString *qstring_from_substr(const char *str, size_t start, size_t end)
  30. {
  31. QString *qstring;
  32. assert(start <= end);
  33. qstring = g_malloc(sizeof(*qstring));
  34. qobject_init(QOBJECT(qstring), QTYPE_QSTRING);
  35. qstring->string = g_strndup(str + start, end - start);
  36. return qstring;
  37. }
  38. /**
  39. * qstring_from_str(): Create a new QString from a regular C string
  40. *
  41. * Return strong reference.
  42. */
  43. QString *qstring_from_str(const char *str)
  44. {
  45. return qstring_from_substr(str, 0, strlen(str));
  46. }
  47. /**
  48. * qstring_from_gstring(): Convert a GString to a QString
  49. *
  50. * Return strong reference.
  51. */
  52. QString *qstring_from_gstring(GString *gstr)
  53. {
  54. QString *qstring;
  55. qstring = g_malloc(sizeof(*qstring));
  56. qobject_init(QOBJECT(qstring), QTYPE_QSTRING);
  57. qstring->string = g_string_free(gstr, false);
  58. return qstring;
  59. }
  60. /**
  61. * qstring_get_str(): Return a pointer to the stored string
  62. *
  63. * NOTE: Should be used with caution, if the object is deallocated
  64. * this pointer becomes invalid.
  65. */
  66. const char *qstring_get_str(const QString *qstring)
  67. {
  68. return qstring->string;
  69. }
  70. /**
  71. * qstring_is_equal(): Test whether the two QStrings are equal
  72. */
  73. bool qstring_is_equal(const QObject *x, const QObject *y)
  74. {
  75. return !strcmp(qobject_to(QString, x)->string,
  76. qobject_to(QString, y)->string);
  77. }
  78. /**
  79. * qstring_destroy_obj(): Free all memory allocated by a QString
  80. * object
  81. */
  82. void qstring_destroy_obj(QObject *obj)
  83. {
  84. QString *qs;
  85. assert(obj != NULL);
  86. qs = qobject_to(QString, obj);
  87. g_free((char *)qs->string);
  88. g_free(qs);
  89. }
  90. void qstring_unref(QString *q)
  91. {
  92. qobject_unref(q);
  93. }