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"))