]> xenbits.xensource.com Git - libvirt.git/commitdiff
hyperv: enable use of g_autoptr for the rest of the CIM/WMI classes
authorMatt Coleman <mcoleman@datto.com>
Thu, 21 Jan 2021 18:50:46 +0000 (13:50 -0500)
committerLaine Stump <laine@redhat.com>
Fri, 22 Jan 2021 19:04:24 +0000 (14:04 -0500)
Signed-off-by: Matt Coleman <matt@datto.com>
Reviewed-by: Laine Stump <laine@redhat.com>
scripts/hyperv_wmi_generator.py
src/hyperv/hyperv_wmi.c
src/hyperv/hyperv_wmi.h

index e5e961d2dbe21a0b46d54cfc2f955e554ccb0782..f26558cb56cf383ce8274bd321add83a48d55a65 100755 (executable)
@@ -98,6 +98,8 @@ class WmiClass:
 
         typedef = "typedef struct _%s %s;\n" % (self.name, self.name)
         typedef += "typedef struct _%s_Data %s_Data;\n" % (self.name, self.name)
+        typedef += "G_DEFINE_AUTOPTR_CLEANUP_FUNC(%s, hypervFreeObject);\n" % self.name
+        typedef += "\n"
 
         return typedef
 
@@ -308,6 +310,8 @@ def main():
     classes_header.write(notice)
     classes_source.write(notice)
 
+    classes_typedef.write("void hypervFreeObject(void *object);\n\n\n")
+
     names = sorted(wmi_classes_by_name.keys())
 
     for name in names:
index 2a4377a12f5abb1d165636d56c12c111c56df39f..0a9d4bf4fd5596332ef35d48c51816ea406291d2 100644 (file)
@@ -1068,7 +1068,7 @@ hypervEnumAndPull(hypervPrivate *priv, hypervWqlQueryPtr wqlQuery,
 
 
 void
-hypervFreeObject(hypervObject *object)
+hypervFreeObject(void *object)
 {
     hypervObject *next;
     WsSerializerContextH serializerContext;
@@ -1076,15 +1076,15 @@ hypervFreeObject(hypervObject *object)
     if (object == NULL)
         return;
 
-    serializerContext = wsmc_get_serialization_context(object->priv->client);
+    serializerContext = wsmc_get_serialization_context(((hypervObject *)object)->priv->client);
 
     while (object != NULL) {
-        next = object->next;
+        next = ((hypervObject *)object)->next;
 
-        object->priv = NULL;
+        ((hypervObject *)object)->priv = NULL;
 
-        if (ws_serializer_free_mem(serializerContext, object->data,
-                                   object->info->serializerInfo) < 0) {
+        if (ws_serializer_free_mem(serializerContext, ((hypervObject *)object)->data,
+                                   ((hypervObject *)object)->info->serializerInfo) < 0) {
             VIR_ERROR(_("Could not free deserialized data"));
         }
 
index c9b2728df3ff77042f70e901544a19ed74ed7157..f09948895edae60efeeefdaa2efc77c43d72f38d 100644 (file)
@@ -63,7 +63,7 @@ struct _hypervWqlQuery {
 int hypervEnumAndPull(hypervPrivate *priv, hypervWqlQueryPtr wqlQuery,
                       hypervObject **list);
 
-void hypervFreeObject(hypervObject *object);
+void hypervFreeObject(void *object);
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(hypervObject, hypervFreeObject);