提交 88e6f39a 编写于 作者: D Daniel Veillard

* src/hash.c, src/internal.h: Switch the uuid parameter in virGetDomain

  to be of type 'unsigned char' since its a raw UUID we're passing in,
  not a printable one.
* src/libvirt.c: Remove bogus "unsigned char" -> "char" type casts. Hook
  up the "domainLookupByID", "domainLookupByUUID", "domainLookupByName"
  and "domainGetInfo" driver backend functions.
Daniel
上级 d0f2c663
Fri May 26 11:59:20 EDT 2006 Daniel P. Berrange <berrange@redhat.com>
* src/hash.c, src/internal.h: Switch the uuid parameter in virGetDomain
to be of type 'unsigned char' since its a raw UUID we're passing in,
not a printable one.
* src/libvirt.c: Remove bogus "unsigned char" -> "char" type casts. Hook
up the "domainLookupByID", "domainLookupByUUID", "domainLookupByName"
and "domainGetInfo" driver backend functions.
Mon May 29 17:02:26 CEST 2006 Karel Zak <kzak@redhat.com> Mon May 29 17:02:26 CEST 2006 Karel Zak <kzak@redhat.com>
* src/libvirt_sym.version: added in missing symbols referenced by python * src/libvirt_sym.version: added in missing symbols referenced by python
......
...@@ -602,7 +602,7 @@ virFreeConnect(virConnectPtr conn) { ...@@ -602,7 +602,7 @@ virFreeConnect(virConnectPtr conn) {
* Returns a pointer to the domain, or NULL in case of failure * Returns a pointer to the domain, or NULL in case of failure
*/ */
virDomainPtr virDomainPtr
virGetDomain(virConnectPtr conn, const char *name, const char *uuid) { virGetDomain(virConnectPtr conn, const char *name, const unsigned char *uuid) {
virDomainPtr ret = NULL; virDomainPtr ret = NULL;
if ((!VIR_IS_CONNECT(conn)) || ((name == NULL) && (uuid == NULL)) || if ((!VIR_IS_CONNECT(conn)) || ((name == NULL) && (uuid == NULL)) ||
......
...@@ -182,7 +182,7 @@ virConnectPtr virGetConnect (void); ...@@ -182,7 +182,7 @@ virConnectPtr virGetConnect (void);
int virFreeConnect (virConnectPtr conn); int virFreeConnect (virConnectPtr conn);
virDomainPtr virGetDomain (virConnectPtr conn, virDomainPtr virGetDomain (virConnectPtr conn,
const char *name, const char *name,
const char *uuid); const unsigned char *uuid);
int virFreeDomain (virConnectPtr conn, int virFreeDomain (virConnectPtr conn,
virDomainPtr domain); virDomainPtr domain);
virDomainPtr virGetDomainByID(virConnectPtr conn, virDomainPtr virGetDomainByID(virConnectPtr conn,
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#include "xs_internal.h" #include "xs_internal.h"
#include "xml.h" #include "xml.h"
/* /*
* TODO: * TODO:
* - use lock to protect against concurrent accesses ? * - use lock to protect against concurrent accesses ?
...@@ -293,6 +292,7 @@ virConnectOpenReadOnly(const char *name) ...@@ -293,6 +292,7 @@ virConnectOpenReadOnly(const char *name)
VIR_DRV_OPEN_QUIET | VIR_DRV_OPEN_RO); VIR_DRV_OPEN_QUIET | VIR_DRV_OPEN_RO);
if (res == 0) if (res == 0)
ret->drivers[ret->nb_drivers++] = virDriverTab[i]; ret->drivers[ret->nb_drivers++] = virDriverTab[i];
} }
} }
if (ret->nb_drivers == 0) { if (ret->nb_drivers == 0) {
...@@ -600,6 +600,7 @@ virDomainLookupByID(virConnectPtr conn, int id) ...@@ -600,6 +600,7 @@ virDomainLookupByID(virConnectPtr conn, int id)
virDomainPtr ret; virDomainPtr ret;
char *name = NULL; char *name = NULL;
unsigned char uuid[16]; unsigned char uuid[16];
int i;
if (!VIR_IS_CONNECT(conn)) { if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__); virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
...@@ -610,6 +611,16 @@ virDomainLookupByID(virConnectPtr conn, int id) ...@@ -610,6 +611,16 @@ virDomainLookupByID(virConnectPtr conn, int id)
return (NULL); return (NULL);
} }
/* Go though the driver registered entry points */
for (i = 0;i < conn->nb_drivers;i++) {
if ((conn->drivers[i] != NULL) &&
(conn->drivers[i]->domainLookupByID != NULL)) {
ret = conn->drivers[i]->domainLookupByID(conn, id);
if (ret)
return(ret);
}
}
/* retrieve home path of the domain */ /* retrieve home path of the domain */
if (conn->xshandle != NULL) { if (conn->xshandle != NULL) {
path = xs_get_domain_path(conn->xshandle, (unsigned int) id); path = xs_get_domain_path(conn->xshandle, (unsigned int) id);
...@@ -633,7 +644,7 @@ virDomainLookupByID(virConnectPtr conn, int id) ...@@ -633,7 +644,7 @@ virDomainLookupByID(virConnectPtr conn, int id)
if (name == NULL) if (name == NULL)
goto error; goto error;
ret = virGetDomain(conn, name, (const char *)&uuid[0]); ret = virGetDomain(conn, name, uuid);
if (ret == NULL) { if (ret == NULL) {
virLibConnError(conn, VIR_ERR_NO_MEMORY, "Allocating domain"); virLibConnError(conn, VIR_ERR_NO_MEMORY, "Allocating domain");
goto error; goto error;
...@@ -670,6 +681,7 @@ virDomainLookupByUUID(virConnectPtr conn, const unsigned char *uuid) ...@@ -670,6 +681,7 @@ virDomainLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
char **tmp; char **tmp;
unsigned char ident[16]; unsigned char ident[16];
int id = -1; int id = -1;
int i;
if (!VIR_IS_CONNECT(conn)) { if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__); virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
...@@ -679,6 +691,17 @@ virDomainLookupByUUID(virConnectPtr conn, const unsigned char *uuid) ...@@ -679,6 +691,17 @@ virDomainLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__); virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
return (NULL); return (NULL);
} }
/* Go though the driver registered entry points */
for (i = 0;i < conn->nb_drivers;i++) {
if ((conn->drivers[i] != NULL) &&
(conn->drivers[i]->domainLookupByUUID != NULL)) {
ret = conn->drivers[i]->domainLookupByUUID(conn, uuid);
if (ret)
return(ret);
}
}
names = xenDaemonListDomains(conn); names = xenDaemonListDomains(conn);
tmp = names; tmp = names;
...@@ -701,7 +724,7 @@ virDomainLookupByUUID(virConnectPtr conn, const unsigned char *uuid) ...@@ -701,7 +724,7 @@ virDomainLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
if (name == NULL) if (name == NULL)
return (NULL); return (NULL);
ret = virGetDomain(conn, name, (const char *)&uuid[0]); ret = virGetDomain(conn, name, uuid);
if (ret == NULL) { if (ret == NULL) {
if (name != NULL) if (name != NULL)
free(name); free(name);
...@@ -774,6 +797,7 @@ virDomainPtr ...@@ -774,6 +797,7 @@ virDomainPtr
virDomainLookupByName(virConnectPtr conn, const char *name) virDomainLookupByName(virConnectPtr conn, const char *name)
{ {
virDomainPtr ret = NULL; virDomainPtr ret = NULL;
int i;
if (!VIR_IS_CONNECT(conn)) { if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__); virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
...@@ -784,6 +808,16 @@ virDomainLookupByName(virConnectPtr conn, const char *name) ...@@ -784,6 +808,16 @@ virDomainLookupByName(virConnectPtr conn, const char *name)
return (NULL); return (NULL);
} }
/* Go though the driver registered entry points */
for (i = 0;i < conn->nb_drivers;i++) {
if ((conn->drivers[i] != NULL) &&
(conn->drivers[i]->domainLookupByName != NULL)) {
ret = conn->drivers[i]->domainLookupByName(conn, name);
if (ret)
return(ret);
}
}
/* try first though Xend */ /* try first though Xend */
ret = xenDaemonDomainLookupByName(conn, name); ret = xenDaemonDomainLookupByName(conn, name);
if (ret != NULL) { if (ret != NULL) {
...@@ -1400,6 +1434,7 @@ int ...@@ -1400,6 +1434,7 @@ int
virDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info) virDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
{ {
int ret; int ret;
int i;
if (!VIR_IS_CONNECTED_DOMAIN(domain)) { if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
...@@ -1412,6 +1447,14 @@ virDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info) ...@@ -1412,6 +1447,14 @@ virDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
memset(info, 0, sizeof(virDomainInfo)); memset(info, 0, sizeof(virDomainInfo));
for (i = 0;i < domain->conn->nb_drivers;i++) {
if ((domain->conn->drivers[i] != NULL) &&
(domain->conn->drivers[i]->domainGetInfo != NULL)) {
if (domain->conn->drivers[i]->domainGetInfo(domain, info) == 0)
return 0;
}
}
/* /*
* if we have direct access though the hypervisor do a direct call * if we have direct access though the hypervisor do a direct call
*/ */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册