mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 03:12:22 +00:00
virshGetOneDisplay: Automaticaly free extracted data
Use automatic memory freeing for the temporary variables holding the data extracted from the XML. The code in this function was originally extracted from a loop so we can also drop pre-clearing of the pointers. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
bdc9269b99
commit
d6574a0d2b
@ -11668,15 +11668,14 @@ virshGetOneDisplay(vshControl *ctl,
|
|||||||
const char *xpath_fmt = "string(/domain/devices/graphics[@type='%s']/%s)";
|
const char *xpath_fmt = "string(/domain/devices/graphics[@type='%s']/%s)";
|
||||||
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
|
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
|
||||||
char *xpath = NULL;
|
char *xpath = NULL;
|
||||||
char *listen_addr = NULL;
|
g_autofree char *listen_addr = NULL;
|
||||||
int port = 0;
|
int port = 0;
|
||||||
int tls_port = 0;
|
int tls_port = 0;
|
||||||
char *type_conn = NULL;
|
g_autofree char *type_conn = NULL;
|
||||||
char *sockpath = NULL;
|
g_autofree char *sockpath = NULL;
|
||||||
char *passwd = NULL;
|
g_autofree char *passwd = NULL;
|
||||||
int tmp;
|
int tmp;
|
||||||
bool params = false;
|
bool params = false;
|
||||||
virSocketAddr addr;
|
|
||||||
|
|
||||||
/* Create our XPATH lookup for the current display's port */
|
/* Create our XPATH lookup for the current display's port */
|
||||||
VIR_FREE(xpath);
|
VIR_FREE(xpath);
|
||||||
@ -11706,7 +11705,6 @@ virshGetOneDisplay(vshControl *ctl,
|
|||||||
|
|
||||||
/* Attempt to get the listening addr if set for the current
|
/* Attempt to get the listening addr if set for the current
|
||||||
* graphics scheme */
|
* graphics scheme */
|
||||||
VIR_FREE(listen_addr);
|
|
||||||
listen_addr = virXPathString(xpath, ctxt);
|
listen_addr = virXPathString(xpath, ctxt);
|
||||||
VIR_FREE(xpath);
|
VIR_FREE(xpath);
|
||||||
|
|
||||||
@ -11714,18 +11712,15 @@ virshGetOneDisplay(vshControl *ctl,
|
|||||||
xpath = g_strdup_printf(xpath_fmt, scheme, "listen/@type");
|
xpath = g_strdup_printf(xpath_fmt, scheme, "listen/@type");
|
||||||
|
|
||||||
/* Attempt to get the type of spice connection */
|
/* Attempt to get the type of spice connection */
|
||||||
VIR_FREE(type_conn);
|
|
||||||
type_conn = virXPathString(xpath, ctxt);
|
type_conn = virXPathString(xpath, ctxt);
|
||||||
VIR_FREE(xpath);
|
VIR_FREE(xpath);
|
||||||
|
|
||||||
if (STREQ_NULLABLE(type_conn, "socket")) {
|
if (STREQ_NULLABLE(type_conn, "socket")) {
|
||||||
if (!sockpath) {
|
xpath = g_strdup_printf(xpath_fmt, scheme, "listen/@socket");
|
||||||
xpath = g_strdup_printf(xpath_fmt, scheme, "listen/@socket");
|
|
||||||
|
|
||||||
sockpath = virXPathString(xpath, ctxt);
|
sockpath = virXPathString(xpath, ctxt);
|
||||||
|
|
||||||
VIR_FREE(xpath);
|
VIR_FREE(xpath);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!port && !tls_port && !sockpath)
|
if (!port && !tls_port && !sockpath)
|
||||||
@ -11745,28 +11740,22 @@ virshGetOneDisplay(vshControl *ctl,
|
|||||||
listen_addr = virXPathString(xpath, ctxt);
|
listen_addr = virXPathString(xpath, ctxt);
|
||||||
VIR_FREE(xpath);
|
VIR_FREE(xpath);
|
||||||
} else {
|
} else {
|
||||||
|
virSocketAddr addr;
|
||||||
|
|
||||||
/* If listen_addr is 0.0.0.0 or [::] we should try to parse URI and set
|
/* If listen_addr is 0.0.0.0 or [::] we should try to parse URI and set
|
||||||
* listen_addr based on current URI. */
|
* listen_addr based on current URI. If that fails we'll print
|
||||||
|
* 'localhost' as the address as INADDR_ANY won't help the user. */
|
||||||
if (virSocketAddrParse(&addr, listen_addr, AF_UNSPEC) > 0 &&
|
if (virSocketAddrParse(&addr, listen_addr, AF_UNSPEC) > 0 &&
|
||||||
virSocketAddrIsWildcard(&addr)) {
|
virSocketAddrIsWildcard(&addr)) {
|
||||||
|
|
||||||
virConnectPtr conn = ((virshControl *)(ctl->privData))->conn;
|
virConnectPtr conn = ((virshControl *)(ctl->privData))->conn;
|
||||||
char *uriStr = virConnectGetURI(conn);
|
g_autofree char *uriStr = virConnectGetURI(conn);
|
||||||
virURI *uri = NULL;
|
g_autoptr(virURI) uri = NULL;
|
||||||
|
|
||||||
if (uriStr) {
|
g_clear_pointer(&listen_addr, g_free);
|
||||||
uri = virURIParse(uriStr);
|
|
||||||
VIR_FREE(uriStr);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* It's safe to free the listen_addr even if parsing of URI
|
if (uriStr && (uri = virURIParse(uriStr)))
|
||||||
* fails, if there is no listen_addr we will print "localhost". */
|
|
||||||
VIR_FREE(listen_addr);
|
|
||||||
|
|
||||||
if (uri) {
|
|
||||||
listen_addr = g_strdup(uri->server);
|
listen_addr = g_strdup(uri->server);
|
||||||
virURIFree(uri);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -11779,7 +11768,6 @@ virshGetOneDisplay(vshControl *ctl,
|
|||||||
xpath = g_strdup_printf(xpath_fmt, scheme, "@passwd");
|
xpath = g_strdup_printf(xpath_fmt, scheme, "@passwd");
|
||||||
|
|
||||||
/* Attempt to get the password */
|
/* Attempt to get the password */
|
||||||
VIR_FREE(passwd);
|
|
||||||
passwd = virXPathString(xpath, ctxt);
|
passwd = virXPathString(xpath, ctxt);
|
||||||
VIR_FREE(xpath);
|
VIR_FREE(xpath);
|
||||||
|
|
||||||
@ -11803,9 +11791,6 @@ virshGetOneDisplay(vshControl *ctl,
|
|||||||
else
|
else
|
||||||
virBufferAsprintf(&buf, "%s", listen_addr);
|
virBufferAsprintf(&buf, "%s", listen_addr);
|
||||||
|
|
||||||
/* Free socket to prepare the pointer for the next iteration */
|
|
||||||
VIR_FREE(sockpath);
|
|
||||||
|
|
||||||
/* Add the port */
|
/* Add the port */
|
||||||
if (port) {
|
if (port) {
|
||||||
if (STREQ(scheme, "vnc")) {
|
if (STREQ(scheme, "vnc")) {
|
||||||
@ -11835,10 +11820,6 @@ virshGetOneDisplay(vshControl *ctl,
|
|||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
VIR_FREE(xpath);
|
VIR_FREE(xpath);
|
||||||
VIR_FREE(type_conn);
|
|
||||||
VIR_FREE(sockpath);
|
|
||||||
VIR_FREE(passwd);
|
|
||||||
VIR_FREE(listen_addr);
|
|
||||||
|
|
||||||
return virBufferContentAndReset(&buf);
|
return virBufferContentAndReset(&buf);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user