Mit freundlichen Grüßen/Kind regards
   Boris Fiuczynski

IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Martina Köderitz
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294

On 10/08/2013 08:13 AM, Xu Wang wrote:
Signed-off-by: Xu Wang <[email protected]>
---
  libxkutil/device_parsing.c |   53 ++++++++++++++++++++++++++++++++++++++++++++
  1 files changed, 53 insertions(+), 0 deletions(-)

diff --git a/libxkutil/device_parsing.c b/libxkutil/device_parsing.c
index 7900e06..ea84d07 100644
--- a/libxkutil/device_parsing.c
+++ b/libxkutil/device_parsing.c
@@ -52,6 +52,49 @@
  /* Device parse function */
  typedef int (*dev_parse_func_t)(xmlNode *, struct virt_device **);

+static void cleanup_node_of_others(struct others *others)
+{
+        if (others == NULL) {
+                return;
+        }
remove curly brackets
+
+        if (others->name) {
+                free(others->name);
+        }
+
+        if (others->parent) {
+                free(others->parent);
+        }
+
+        if (others->value) {
+                free(others->value);
+        }
All other cleanup methods neglect the NULL check.
+
+        free(others);
+}
+
+static void cleanup_others(struct others *others)
+{
+        struct others *head = others;
+
+        if (others == NULL)
+                return;
+
+        while (head) {
You could join the three lines above into "while (others) {"
+                head = others->next;
+                cleanup_node_of_others(others);
+                others = head;
+        }
+}
+
+static void cleanup_unknown_device(struct unknown_device *dev)
+{
+        if (dev == NULL)
+                return;
free(dev->name); ???
+
+        cleanup_others(dev->others);
+}
+
  static void cleanup_disk_device(struct disk_device *dev)
  {
          if (dev == NULL)
@@ -66,6 +109,7 @@ static void cleanup_disk_device(struct disk_device *dev)
          free(dev->virtual_dev);
          free(dev->bus_type);
          free(dev->access_mode);
+        cleanup_others(dev->others);
  }

  static void cleanup_vsi_device(struct vsi_device *dev)
@@ -94,6 +138,7 @@ static void cleanup_net_device(struct net_device *dev)
          free(dev->device);
          free(dev->net_mode);
          free(dev->filter_ref);
+        cleanup_others(dev->others);
  }

  static void cleanup_emu_device(struct emu_device *dev)
@@ -102,6 +147,7 @@ static void cleanup_emu_device(struct emu_device *dev)
                  return;

          free(dev->path);
+        cleanup_others(dev->others);
  }

  static void cleanup_vnc_device(struct graphics_device *dev)
@@ -110,6 +156,7 @@ static void cleanup_vnc_device(struct graphics_device *dev)
          free(dev->dev.vnc.host);
          free(dev->dev.vnc.keymap);
          free(dev->dev.vnc.passwd);
+        cleanup_others(dev->dev.vnc.others);
  }

  static void cleanup_sdl_device(struct graphics_device *dev)
@@ -117,6 +164,7 @@ static void cleanup_sdl_device(struct graphics_device *dev)
          free(dev->dev.sdl.display);
          free(dev->dev.sdl.xauth);
          free(dev->dev.sdl.fullscreen);
+        cleanup_others(dev->dev.sdl.others);
  }

  static void cleanup_graphics_device(struct graphics_device *dev)
@@ -130,6 +178,7 @@ static void cleanup_graphics_device(struct graphics_device 
*dev)
                  cleanup_vnc_device(dev);

          free(dev->type);
+        cleanup_others(dev->others);
  }

  static void cleanup_input_device(struct input_device *dev)
@@ -139,6 +188,7 @@ static void cleanup_input_device(struct input_device *dev)

          free(dev->type);
          free(dev->bus);
+        cleanup_others(dev->others);
  }

  void cleanup_virt_device(struct virt_device *dev)
@@ -156,6 +206,8 @@ void cleanup_virt_device(struct virt_device *dev)
                  cleanup_graphics_device(&dev->dev.graphics);
          else if (dev->type == CIM_RES_TYPE_INPUT)
                  cleanup_input_device(&dev->dev.input);
+        else if (dev->type == CIM_RES_TYPE_UNKNOWN)
+                cleanup_unknown_device(&dev->dev.unknown);

          free(dev->id);

@@ -1351,6 +1403,7 @@ void cleanup_dominfo(struct domain **dominfo)
          cleanup_virt_devices(&dom->dev_vcpu, dom->dev_vcpu_ct);
          cleanup_virt_devices(&dom->dev_graphics, dom->dev_graphics_ct);
          cleanup_virt_devices(&dom->dev_input, dom->dev_input_ct);
+        cleanup_virt_devices(&dom->dev_unknown, dom->dev_unknown_ct);

cleanup_others(dom->others); ???
          free(dom);


_______________________________________________
Libvirt-cim mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvirt-cim

Reply via email to