Blob Blame History Raw
From 4eaf7009f1346e11a7d8903025d07ecee84ccf36 Mon Sep 17 00:00:00 2001
From: "Daniel P. Berrange" <berrange@redhat.com>
Date: Tue, 6 Aug 2013 14:23:55 +0100
Subject: [PATCH] Fix error handling for virNodeDeviceGetParent()

  https://bugzilla.redhat.com/show_bug.cgi?id=994141

It is valid for virNodeDeviceGetParent() to return NULL in the
case where there is no parent device present.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 43666d996feed10d72a1eb03415901d7b3d5332a)
---
 Virt.xs                  |  6 ++++--
 examples/node-devlist.pl | 11 +++++++++++
 2 files changed, 15 insertions(+), 2 deletions(-)
 create mode 100644 examples/node-devlist.pl

diff --git a/Virt.xs b/Virt.xs
index aa4a795..f8ebce7 100644
--- a/Virt.xs
+++ b/Virt.xs
@@ -5390,8 +5390,10 @@ const char *
 get_parent(dev)
       virNodeDevicePtr dev;
     CODE:
-      if (!(RETVAL = virNodeDeviceGetParent(dev)))
-          _croak_error();
+      if (!(RETVAL = virNodeDeviceGetParent(dev))) {
+          if (virGetLastError() != NULL)
+              _croak_error();
+      }
   OUTPUT:
       RETVAL
 
diff --git a/examples/node-devlist.pl b/examples/node-devlist.pl
new file mode 100644
index 0000000..59f6a82
--- /dev/null
+++ b/examples/node-devlist.pl
@@ -0,0 +1,11 @@
+#!/usr/bin/perl
+
+use Sys::Virt;
+
+my $conn = Sys::Virt->new();
+
+my @nodelist = $conn->list_all_node_devices();
+foreach my $dev (@nodelist){
+    my $parent = $dev->get_parent();
+    printf "%s: < %s\n", $dev->get_name(), $parent;
+}