[libvirt] [PATCH] remote: Fix the build by explicitly casting the obj pointer for xdr_free

Erik Skultety posted 1 patch 5 years, 4 months ago
Test syntax-check passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/76ddd01ecd27e85f28e9f62641b3b1a2fffc8526.1544777785.git.eskultet@redhat.com
src/remote/remote_daemon_dispatch.c | 66 ++++++++++++++---------------
1 file changed, 33 insertions(+), 33 deletions(-)
[libvirt] [PATCH] remote: Fix the build by explicitly casting the obj pointer for xdr_free
Posted by Erik Skultety 5 years, 4 months ago
For some reason, xdr_free uses char * instead of void * for its 2nd
argument which is passed to a custom free routine. Commit
dc54b3ec missed this detail which made the build fail on a number of
platforms. Fix it by explicitly casting the object pointer to char *
just like we do in other places throughout the code base.

Signed-off-by: Erik Skultety <eskultet@redhat.com>
---

Pushed under the build breaker rule.

 src/remote/remote_daemon_dispatch.c | 66 ++++++++++++++---------------
 1 file changed, 33 insertions(+), 33 deletions(-)

diff --git a/src/remote/remote_daemon_dispatch.c b/src/remote/remote_daemon_dispatch.c
index c087197634..51bc055564 100644
--- a/src/remote/remote_daemon_dispatch.c
+++ b/src/remote/remote_daemon_dispatch.c
@@ -337,7 +337,7 @@ remoteRelayDomainEventLifecycle(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_lifecycle_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -378,7 +378,7 @@ remoteRelayDomainEventReboot(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_reboot_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -423,7 +423,7 @@ remoteRelayDomainEventRTCChange(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_rtc_change_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -467,7 +467,7 @@ remoteRelayDomainEventWatchdog(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_watchdog_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -516,7 +516,7 @@ remoteRelayDomainEventIOError(virConnectPtr conn,
     return 0;
  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_io_error_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -569,7 +569,7 @@ remoteRelayDomainEventIOErrorReason(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_io_error_reason_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -643,7 +643,7 @@ remoteRelayDomainEventGraphics(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_graphics_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -691,7 +691,7 @@ remoteRelayDomainEventBlockJob(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_block_job_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -733,7 +733,7 @@ remoteRelayDomainEventControlError(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_control_error_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -797,7 +797,7 @@ remoteRelayDomainEventDiskChange(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_disk_change_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -846,7 +846,7 @@ remoteRelayDomainEventTrayChange(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_tray_change_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -888,7 +888,7 @@ remoteRelayDomainEventPMWakeup(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_pmwakeup_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -930,7 +930,7 @@ remoteRelayDomainEventPMSuspend(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_pmsuspend_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -973,7 +973,7 @@ remoteRelayDomainEventBalloonChange(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_balloon_change_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1016,7 +1016,7 @@ remoteRelayDomainEventPMSuspendDisk(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_pmsuspend_disk_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1064,7 +1064,7 @@ remoteRelayDomainEventDeviceRemoved(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_device_removed_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1105,7 +1105,7 @@ remoteRelayDomainEventBlockJob2(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_block_job_2_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1150,7 +1150,7 @@ remoteRelayDomainEventTunable(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_callback_tunable_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1191,7 +1191,7 @@ remoteRelayDomainEventAgentLifecycle(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_callback_agent_lifecycle_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1231,7 +1231,7 @@ remoteRelayDomainEventDeviceAdded(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_callback_device_added_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1270,7 +1270,7 @@ remoteRelayDomainEventMigrationIteration(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_callback_migration_iteration_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1315,7 +1315,7 @@ remoteRelayDomainEventJobCompleted(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_callback_job_completed_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1355,7 +1355,7 @@ remoteRelayDomainEventDeviceRemovalFailed(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_callback_device_removal_failed_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1405,7 +1405,7 @@ remoteRelayDomainEventMetadataChange(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_callback_metadata_change_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1453,7 +1453,7 @@ remoteRelayDomainEventBlockThreshold(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_domain_event_block_threshold_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1521,7 +1521,7 @@ remoteRelayNetworkEventLifecycle(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_network_event_lifecycle_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1565,7 +1565,7 @@ remoteRelayStoragePoolEventLifecycle(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_storage_pool_event_lifecycle_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1599,7 +1599,7 @@ remoteRelayStoragePoolEventRefresh(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_storage_pool_event_refresh_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1644,7 +1644,7 @@ remoteRelayNodeDeviceEventLifecycle(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_node_device_event_lifecycle_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1678,7 +1678,7 @@ remoteRelayNodeDeviceEventUpdate(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_node_device_event_update_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1723,7 +1723,7 @@ remoteRelaySecretEventLifecycle(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_secret_event_lifecycle_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1757,7 +1757,7 @@ remoteRelaySecretEventValueChanged(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_remote_secret_event_value_changed_msg,
-             &data);
+             (char *) &data);
     return -1;
 }

@@ -1812,7 +1812,7 @@ remoteRelayDomainQemuMonitorEvent(virConnectPtr conn,

  error:
     xdr_free((xdrproc_t)xdr_qemu_domain_monitor_event_msg,
-             &data);
+             (char *) &data);
     return;
 }

--
2.19.2

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] remote: Fix the build by explicitly casting the obj pointer for xdr_free
Posted by Daniel P. Berrangé 5 years, 4 months ago
On Fri, Dec 14, 2018 at 10:18:39AM +0100, Erik Skultety wrote:
> For some reason, xdr_free uses char * instead of void * for its 2nd
> argument which is passed to a custom free routine. Commit
> dc54b3ec missed this detail which made the build fail on a number of
> platforms. Fix it by explicitly casting the object pointer to char *
> just like we do in other places throughout the code base.

Which platforms did you see this on ?

On Linux  libtirpc declares it correctly

  extern void     xdr_free(xdrproc_t, void *);


> 
> Signed-off-by: Erik Skultety <eskultet@redhat.com>
> ---
> 
> Pushed under the build breaker rule.
> 
>  src/remote/remote_daemon_dispatch.c | 66 ++++++++++++++---------------
>  1 file changed, 33 insertions(+), 33 deletions(-)
> 
> diff --git a/src/remote/remote_daemon_dispatch.c b/src/remote/remote_daemon_dispatch.c
> index c087197634..51bc055564 100644
> --- a/src/remote/remote_daemon_dispatch.c
> +++ b/src/remote/remote_daemon_dispatch.c
> @@ -337,7 +337,7 @@ remoteRelayDomainEventLifecycle(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_lifecycle_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -378,7 +378,7 @@ remoteRelayDomainEventReboot(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_reboot_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -423,7 +423,7 @@ remoteRelayDomainEventRTCChange(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_rtc_change_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -467,7 +467,7 @@ remoteRelayDomainEventWatchdog(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_watchdog_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -516,7 +516,7 @@ remoteRelayDomainEventIOError(virConnectPtr conn,
>      return 0;
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_io_error_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -569,7 +569,7 @@ remoteRelayDomainEventIOErrorReason(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_io_error_reason_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -643,7 +643,7 @@ remoteRelayDomainEventGraphics(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_graphics_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -691,7 +691,7 @@ remoteRelayDomainEventBlockJob(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_block_job_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -733,7 +733,7 @@ remoteRelayDomainEventControlError(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_control_error_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -797,7 +797,7 @@ remoteRelayDomainEventDiskChange(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_disk_change_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -846,7 +846,7 @@ remoteRelayDomainEventTrayChange(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_tray_change_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -888,7 +888,7 @@ remoteRelayDomainEventPMWakeup(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_pmwakeup_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -930,7 +930,7 @@ remoteRelayDomainEventPMSuspend(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_pmsuspend_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -973,7 +973,7 @@ remoteRelayDomainEventBalloonChange(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_balloon_change_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1016,7 +1016,7 @@ remoteRelayDomainEventPMSuspendDisk(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_pmsuspend_disk_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1064,7 +1064,7 @@ remoteRelayDomainEventDeviceRemoved(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_device_removed_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1105,7 +1105,7 @@ remoteRelayDomainEventBlockJob2(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_block_job_2_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1150,7 +1150,7 @@ remoteRelayDomainEventTunable(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_callback_tunable_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1191,7 +1191,7 @@ remoteRelayDomainEventAgentLifecycle(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_callback_agent_lifecycle_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1231,7 +1231,7 @@ remoteRelayDomainEventDeviceAdded(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_callback_device_added_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1270,7 +1270,7 @@ remoteRelayDomainEventMigrationIteration(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_callback_migration_iteration_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1315,7 +1315,7 @@ remoteRelayDomainEventJobCompleted(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_callback_job_completed_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1355,7 +1355,7 @@ remoteRelayDomainEventDeviceRemovalFailed(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_callback_device_removal_failed_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1405,7 +1405,7 @@ remoteRelayDomainEventMetadataChange(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_callback_metadata_change_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1453,7 +1453,7 @@ remoteRelayDomainEventBlockThreshold(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_domain_event_block_threshold_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1521,7 +1521,7 @@ remoteRelayNetworkEventLifecycle(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_network_event_lifecycle_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1565,7 +1565,7 @@ remoteRelayStoragePoolEventLifecycle(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_storage_pool_event_lifecycle_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1599,7 +1599,7 @@ remoteRelayStoragePoolEventRefresh(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_storage_pool_event_refresh_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1644,7 +1644,7 @@ remoteRelayNodeDeviceEventLifecycle(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_node_device_event_lifecycle_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1678,7 +1678,7 @@ remoteRelayNodeDeviceEventUpdate(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_node_device_event_update_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1723,7 +1723,7 @@ remoteRelaySecretEventLifecycle(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_secret_event_lifecycle_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1757,7 +1757,7 @@ remoteRelaySecretEventValueChanged(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_remote_secret_event_value_changed_msg,
> -             &data);
> +             (char *) &data);
>      return -1;
>  }
> 
> @@ -1812,7 +1812,7 @@ remoteRelayDomainQemuMonitorEvent(virConnectPtr conn,
> 
>   error:
>      xdr_free((xdrproc_t)xdr_qemu_domain_monitor_event_msg,
> -             &data);
> +             (char *) &data);
>      return;
>  }
> 
> --
> 2.19.2
> 
> --
> libvir-list mailing list
> libvir-list@redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] remote: Fix the build by explicitly casting the obj pointer for xdr_free
Posted by Erik Skultety 5 years, 4 months ago
On Fri, Dec 14, 2018 at 10:11:55AM +0000, Daniel P. Berrangé wrote:
> On Fri, Dec 14, 2018 at 10:18:39AM +0100, Erik Skultety wrote:
> > For some reason, xdr_free uses char * instead of void * for its 2nd
> > argument which is passed to a custom free routine. Commit
> > dc54b3ec missed this detail which made the build fail on a number of
> > platforms. Fix it by explicitly casting the object pointer to char *
> > just like we do in other places throughout the code base.
>
> Which platforms did you see this on ?
>
> On Linux  libtirpc declares it correctly
>
>   extern void     xdr_free(xdrproc_t, void *);

Oh, then it's just the man-pages package on Fedora 29 which still reports the
wrong signature. Anyhow, CI reported the issue on Debian 8-9 and Centos7.

Erik

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] remote: Fix the build by explicitly casting the obj pointer for xdr_free
Posted by Daniel P. Berrangé 5 years, 4 months ago
On Fri, Dec 14, 2018 at 12:08:55PM +0100, Erik Skultety wrote:
> On Fri, Dec 14, 2018 at 10:11:55AM +0000, Daniel P. Berrangé wrote:
> > On Fri, Dec 14, 2018 at 10:18:39AM +0100, Erik Skultety wrote:
> > > For some reason, xdr_free uses char * instead of void * for its 2nd
> > > argument which is passed to a custom free routine. Commit
> > > dc54b3ec missed this detail which made the build fail on a number of
> > > platforms. Fix it by explicitly casting the object pointer to char *
> > > just like we do in other places throughout the code base.
> >
> > Which platforms did you see this on ?
> >
> > On Linux  libtirpc declares it correctly
> >
> >   extern void     xdr_free(xdrproc_t, void *);
> 
> Oh, then it's just the man-pages package on Fedora 29 which still reports the
> wrong signature. Anyhow, CI reported the issue on Debian 8-9 and Centos7.

Oh this is a difference with the original in-glibc impl which does indeed
use char *.  


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list