[libvirt] [PATCH] Allow NULL mac address in virGetInterface.

There are places where an interface will not have a mac address, and netcf returns this as a NULL pointer rather than a pointer to an empty string. Rather than checking for this all over the place in libvirt, just save it in the virInterface object as an empty string. --- src/datatypes.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-) diff --git a/src/datatypes.c b/src/datatypes.c index 89ad309..ecefc59 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -588,10 +588,15 @@ virInterfacePtr virGetInterface(virConnectPtr conn, const char *name, const char *mac) { virInterfacePtr ret = NULL; - if ((!VIR_IS_CONNECT(conn)) || (name == NULL) || (mac == NULL)) { + if ((!VIR_IS_CONNECT(conn)) || (name == NULL)) { virLibConnError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__); return(NULL); } + + /* a NULL mac from caller is okay. Treat it as blank */ + if (mac == NULL) + mac = ""; + virMutexLock(&conn->lock); ret = (virInterfacePtr) virHashLookup(conn->interfaces, name); -- 1.6.5.15.gc274d

On Mon, Oct 19, 2009 at 04:41:52PM -0400, Laine Stump wrote:
There are places where an interface will not have a mac address, and netcf returns this as a NULL pointer rather than a pointer to an empty string. Rather than checking for this all over the place in libvirt, just save it in the virInterface object as an empty string. --- src/datatypes.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/src/datatypes.c b/src/datatypes.c index 89ad309..ecefc59 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -588,10 +588,15 @@ virInterfacePtr virGetInterface(virConnectPtr conn, const char *name, const char *mac) { virInterfacePtr ret = NULL;
- if ((!VIR_IS_CONNECT(conn)) || (name == NULL) || (mac == NULL)) { + if ((!VIR_IS_CONNECT(conn)) || (name == NULL)) { virLibConnError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__); return(NULL); } + + /* a NULL mac from caller is okay. Treat it as blank */ + if (mac == NULL) + mac = ""; + virMutexLock(&conn->lock);
ret = (virInterfacePtr) virHashLookup(conn->interfaces, name);
ACK that sounds reasonnable to me. I assume the inverted situation of an interface known only by it's MAC can't happen, right ? Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/

On 10/21/2009 06:19 AM, Daniel Veillard wrote:
On Mon, Oct 19, 2009 at 04:41:52PM -0400, Laine Stump wrote:
There are places where an interface will not have a mac address, and netcf returns this as a NULL pointer rather than a pointer to an empty string. Rather than checking for this all over the place in libvirt, just save it in the virInterface object as an empty string. --- src/datatypes.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/src/datatypes.c b/src/datatypes.c index 89ad309..ecefc59 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -588,10 +588,15 @@ virInterfacePtr virGetInterface(virConnectPtr conn, const char *name, const char *mac) { virInterfacePtr ret = NULL;
- if ((!VIR_IS_CONNECT(conn)) || (name == NULL) || (mac == NULL)) { + if ((!VIR_IS_CONNECT(conn)) || (name == NULL)) { virLibConnError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__); return(NULL); } + + /* a NULL mac from caller is okay. Treat it as blank */ + if (mac == NULL) + mac = ""; + virMutexLock(&conn->lock);
ret = (virInterfacePtr) virHashLookup(conn->interfaces, name);
ACK that sounds reasonnable to me. I assume the inverted situation of an interface known only by it's MAC can't happen, right ?
I believe that is correct - name is a required attribute, but mac address isn't.

On Wed, Oct 21, 2009 at 12:46:03PM -0400, Laine Stump wrote:
On 10/21/2009 06:19 AM, Daniel Veillard wrote:
On Mon, Oct 19, 2009 at 04:41:52PM -0400, Laine Stump wrote:
There are places where an interface will not have a mac address, and netcf returns this as a NULL pointer rather than a pointer to an empty string. Rather than checking for this all over the place in libvirt, just save it in the virInterface object as an empty string. --- src/datatypes.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/src/datatypes.c b/src/datatypes.c index 89ad309..ecefc59 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -588,10 +588,15 @@ virInterfacePtr virGetInterface(virConnectPtr conn, const char *name, const char *mac) { virInterfacePtr ret = NULL;
- if ((!VIR_IS_CONNECT(conn)) || (name == NULL) || (mac == NULL)) { + if ((!VIR_IS_CONNECT(conn)) || (name == NULL)) { virLibConnError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__); return(NULL); } + + /* a NULL mac from caller is okay. Treat it as blank */ + if (mac == NULL) + mac = ""; + virMutexLock(&conn->lock);
ret = (virInterfacePtr) virHashLookup(conn->interfaces, name);
ACK that sounds reasonnable to me. I assume the inverted situation of an interface known only by it's MAC can't happen, right ?
I believe that is correct - name is a required attribute, but mac address isn't.
Okidoc, pushed now, thanks ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/
participants (2)
-
Daniel Veillard
-
Laine Stump