Index: src/xm_internal.c
===================================================================
RCS file: /data/cvs/libvirt/src/xm_internal.c,v
retrieving revision 1.41
diff -u -p -r1.41 xm_internal.c
--- src/xm_internal.c 10 Oct 2007 17:55:38 -0000 1.41
+++ src/xm_internal.c 23 Oct 2007 04:59:20 -0000
@@ -750,10 +750,14 @@ char *xenXMDomainFormatXML(virConnectPtr
/* Extract source driver type */
- if (!(tmp = strchr(src, ':')) || !tmp[0])
- goto skipdisk;
- strncpy(drvName, src, (tmp-src));
- drvName[tmp-src] = '\0';
+ if (!src[0]) {
+ strcpy(drvName, "phy");
+ } else if (!(tmp = strchr(src, ':')) || !tmp[0]) {
+ goto skipdisk;
+ } else {
+ strncpy(drvName, src, (tmp-src));
+ drvName[tmp-src] = '\0';
+ }
/* And the source driver sub-type */
if (!strncmp(drvName, "tap", 3)) {
@@ -763,7 +767,8 @@ char *xenXMDomainFormatXML(virConnectPtr
memmove(src, src+(tmp1-src)+1, strlen(src)-(tmp1-src));
} else {
drvType[0] = '\0';
- memmove(src, src+(tmp-src)+1, strlen(src)-(tmp-src));
+ if (src[0])
+ memmove(src, src+(tmp-src)+1, strlen(src)-(tmp-src));
}
/* phy: type indicates a block device */
@@ -790,7 +795,8 @@ char *xenXMDomainFormatXML(virConnectPtr
virBufferVSprintf(buf, " \n", drvName, drvType);
else
virBufferVSprintf(buf, " \n", drvName);
- virBufferVSprintf(buf, " \n", block ? "dev" : "file", src);
+ if (src[0])
+ virBufferVSprintf(buf, " \n", block ? "dev" : "file", src);
virBufferVSprintf(buf, " \n", dev);
if (!strcmp(head, "r") ||
!strcmp(head, "ro"))