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, "      <driver name='%s' type='%s'/>\n", drvName, drvType);
             else
                 virBufferVSprintf(buf, "      <driver name='%s'/>\n", drvName);
-            virBufferVSprintf(buf, "      <source %s='%s'/>\n", block ? "dev" : "file", src);
+            if (src[0])
+                virBufferVSprintf(buf, "      <source %s='%s'/>\n", block ? "dev" : "file", src);
             virBufferVSprintf(buf, "      <target dev='%s'/>\n", dev);
             if (!strcmp(head, "r") ||
                 !strcmp(head, "ro"))
