63ef543
--- xen-4.5.0-rc1/tools/libxl/xl_cmdimpl.c.orig	2014-10-24 15:22:40.000000000 +0100
63ef543
+++ xen-4.5.0-rc1/tools/libxl/xl_cmdimpl.c	2014-11-26 22:41:41.697043321 +0000
63ef543
@@ -380,10 +380,10 @@
63ef543
 }
63ef543
 static void printf_info(enum output_format output_format,
63ef543
                         int domid,
63ef543
-                        libxl_domain_config *d_config)
63ef543
+                        libxl_domain_config *d_config, FILE *fh)
63ef543
 {
63ef543
     if (output_format == OUTPUT_FORMAT_SXP)
63ef543
-        return printf_info_sexp(domid, d_config);
63ef543
+        return printf_info_sexp(domid, d_config, fh);
63ef543
 
63ef543
     const char *buf;
63ef543
     libxl_yajl_length len = 0;
63ef543
@@ -404,7 +404,7 @@
63ef543
     if (s != yajl_gen_status_ok)
63ef543
         goto out;
63ef543
 
63ef543
-    puts(buf);
63ef543
+    fputs(buf, fh);
63ef543
 
63ef543
 out:
63ef543
     yajl_gen_free(hand);
63ef543
@@ -413,7 +413,13 @@
63ef543
         fprintf(stderr,
63ef543
                 "unable to format domain config as JSON (YAJL:%d)\n", s);
63ef543
 
63ef543
-    if (ferror(stdout) || fflush(stdout)) { perror("stdout"); exit(-1); }
63ef543
+    if (ferror(fh) || fflush(fh)) {
63ef543
+        if (fh == stdout)
63ef543
+            perror("stdout");
63ef543
+        else
63ef543
+            perror("stderr");
63ef543
+        exit(-1);
63ef543
+    }
63ef543
 }
63ef543
 
63ef543
 static int parse_action_on_shutdown(const char *buf, libxl_action_on_shutdown *a)
63ef543
@@ -2423,7 +2429,7 @@
63ef543
     }
63ef543
 
63ef543
     if (!dom_info->quiet)
63ef543
-        printf("Parsing config from %s\n", config_source);
63ef543
+        fprintf(stderr, "Parsing config from %s\n", config_source);
63ef543
 
63ef543
     parse_config_data(config_source, config_data, config_len, &d_config, dom_info);
63ef543
 
63ef543
@@ -2451,7 +2457,7 @@
63ef543
     }
63ef543
 
63ef543
     if (debug || dom_info->dryrun)
63ef543
-        printf_info(default_output_format, -1, &d_config);
63ef543
+        printf_info(default_output_format, -1, &d_config, stderr);
63ef543
 
63ef543
     ret = 0;
63ef543
     if (dom_info->dryrun)
63ef543
@@ -3403,7 +3409,7 @@
63ef543
         if (default_output_format == OUTPUT_FORMAT_JSON)
63ef543
             s = printf_info_one_json(hand, info[i].domid, &d_config);
63ef543
         else
63ef543
-            printf_info_sexp(info[i].domid, &d_config);
63ef543
+            printf_info_sexp(info[i].domid, &d_config, stdout);
63ef543
         libxl_domain_config_dispose(&d_config);
63ef543
         free(data);
63ef543
         free(config_source);
63ef543
@@ -4725,7 +4731,7 @@
63ef543
     parse_config_data(filename, config_data, config_len, &d_config, NULL);
63ef543
 
63ef543
     if (debug || dryrun_only)
63ef543
-        printf_info(default_output_format, -1, &d_config);
63ef543
+        printf_info(default_output_format, -1, &d_config, stdout);
63ef543
 
63ef543
     if (!dryrun_only) {
63ef543
         fprintf(stderr, "setting dom%d configuration\n", domid);
63ef543
--- xen-4.5.0-rc1/tools/libxl/xl_sxp.c.orig	2014-10-24 15:22:40.000000000 +0100
63ef543
+++ xen-4.5.0-rc1/tools/libxl/xl_sxp.c	2014-11-26 22:30:58.416394082 +0000
63ef543
@@ -30,7 +30,7 @@
63ef543
 /* In general you should not add new output to this function since it
63ef543
  * is intended only for legacy use.
63ef543
  */
63ef543
-void printf_info_sexp(int domid, libxl_domain_config *d_config)
63ef543
+void printf_info_sexp(int domid, libxl_domain_config *d_config, FILE *fh)
63ef543
 {
63ef543
     int i;
63ef543
     libxl_dominfo info;
63ef543
@@ -39,197 +39,197 @@
63ef543
     libxl_domain_build_info *b_info = &d_config->b_info;
63ef543
     char *pool;
63ef543
 
63ef543
-    printf("(domain\n\t(domid %d)\n", domid);
63ef543
-    printf("\t(create_info)\n");
63ef543
-    printf("\t(hvm %d)\n", c_info->type == LIBXL_DOMAIN_TYPE_HVM);
63ef543
-    printf("\t(hap %s)\n", libxl_defbool_to_string(c_info->hap));
63ef543
-    printf("\t(oos %s)\n", libxl_defbool_to_string(c_info->oos));
63ef543
-    printf("\t(ssidref %d)\n", c_info->ssidref);
63ef543
-    printf("\t(name %s)\n", c_info->name);
63ef543
+    fprintf(fh, "(domain\n\t(domid %d)\n", domid);
63ef543
+    fprintf(fh, "\t(create_info)\n");
63ef543
+    fprintf(fh, "\t(hvm %d)\n", c_info->type == LIBXL_DOMAIN_TYPE_HVM);
63ef543
+    fprintf(fh, "\t(hap %s)\n", libxl_defbool_to_string(c_info->hap));
63ef543
+    fprintf(fh, "\t(oos %s)\n", libxl_defbool_to_string(c_info->oos));
63ef543
+    fprintf(fh, "\t(ssidref %d)\n", c_info->ssidref);
63ef543
+    fprintf(fh, "\t(name %s)\n", c_info->name);
63ef543
 
63ef543
     /* retrieve the UUID from dominfo, since it is probably generated
63ef543
      * during parsing and thus does not match the real one
63ef543
      */
63ef543
     if (libxl_domain_info(ctx, &info, domid) == 0) {
63ef543
-        printf("\t(uuid " LIBXL_UUID_FMT ")\n", LIBXL_UUID_BYTES(info.uuid));
63ef543
+        fprintf(fh, "\t(uuid " LIBXL_UUID_FMT ")\n", LIBXL_UUID_BYTES(info.uuid));
63ef543
     } else {
63ef543
-        printf("\t(uuid <unknown>)\n");
63ef543
+        fprintf(fh, "\t(uuid <unknown>)\n");
63ef543
     }
63ef543
     pool = libxl_cpupoolid_to_name(ctx, c_info->poolid);
63ef543
     if (pool)
63ef543
-        printf("\t(cpupool %s)\n", pool);
63ef543
+        fprintf(fh, "\t(cpupool %s)\n", pool);
63ef543
     free(pool);
63ef543
     if (c_info->xsdata)
63ef543
-        printf("\t(xsdata contains data)\n");
63ef543
+        fprintf(fh, "\t(xsdata contains data)\n");
63ef543
     else
63ef543
-        printf("\t(xsdata (null))\n");
63ef543
+        fprintf(fh, "\t(xsdata (null))\n");
63ef543
     if (c_info->platformdata)
63ef543
-        printf("\t(platformdata contains data)\n");
63ef543
+        fprintf(fh, "\t(platformdata contains data)\n");
63ef543
     else
63ef543
-        printf("\t(platformdata (null))\n");
63ef543
+        fprintf(fh, "\t(platformdata (null))\n");
63ef543
 
63ef543
 
63ef543
-    printf("\t(build_info)\n");
63ef543
-    printf("\t(max_vcpus %d)\n", b_info->max_vcpus);
63ef543
-    printf("\t(tsc_mode %s)\n", libxl_tsc_mode_to_string(b_info->tsc_mode));
63ef543
-    printf("\t(max_memkb %"PRId64")\n", b_info->max_memkb);
63ef543
-    printf("\t(target_memkb %"PRId64")\n", b_info->target_memkb);
63ef543
-    printf("\t(nomigrate %s)\n",
63ef543
+    fprintf(fh, "\t(build_info)\n");
63ef543
+    fprintf(fh, "\t(max_vcpus %d)\n", b_info->max_vcpus);
63ef543
+    fprintf(fh, "\t(tsc_mode %s)\n", libxl_tsc_mode_to_string(b_info->tsc_mode));
63ef543
+    fprintf(fh, "\t(max_memkb %"PRId64")\n", b_info->max_memkb);
63ef543
+    fprintf(fh, "\t(target_memkb %"PRId64")\n", b_info->target_memkb);
63ef543
+    fprintf(fh, "\t(nomigrate %s)\n",
63ef543
            libxl_defbool_to_string(b_info->disable_migrate));
63ef543
 
63ef543
     if (c_info->type == LIBXL_DOMAIN_TYPE_PV && b_info->u.pv.bootloader) {
63ef543
-        printf("\t(bootloader %s)\n", b_info->u.pv.bootloader);
63ef543
+        fprintf(fh, "\t(bootloader %s)\n", b_info->u.pv.bootloader);
63ef543
         if (b_info->u.pv.bootloader_args) {
63ef543
-            printf("\t(bootloader_args");
63ef543
+            fprintf(fh, "\t(bootloader_args");
63ef543
             for (i=0; b_info->u.pv.bootloader_args[i]; i++)
63ef543
-                printf(" %s", b_info->u.pv.bootloader_args[i]);
63ef543
-            printf(")\n");
63ef543
+                fprintf(fh, " %s", b_info->u.pv.bootloader_args[i]);
63ef543
+            fprintf(fh, ")\n");
63ef543
         }
63ef543
     }
63ef543
 
63ef543
-    printf("\t(image\n");
63ef543
+    fprintf(fh, "\t(image\n");
63ef543
     switch (c_info->type) {
63ef543
     case LIBXL_DOMAIN_TYPE_HVM:
63ef543
-        printf("\t\t(hvm\n");
63ef543
-        printf("\t\t\t(firmware %s)\n", b_info->u.hvm.firmware);
63ef543
-        printf("\t\t\t(video_memkb %"PRId64")\n", b_info->video_memkb);
63ef543
-        printf("\t\t\t(shadow_memkb %"PRId64")\n", b_info->shadow_memkb);
63ef543
-        printf("\t\t\t(pae %s)\n", libxl_defbool_to_string(b_info->u.hvm.pae));
63ef543
-        printf("\t\t\t(apic %s)\n",
63ef543
+        fprintf(fh, "\t\t(hvm\n");
63ef543
+        fprintf(fh, "\t\t\t(firmware %s)\n", b_info->u.hvm.firmware);
63ef543
+        fprintf(fh, "\t\t\t(video_memkb %"PRId64")\n", b_info->video_memkb);
63ef543
+        fprintf(fh, "\t\t\t(shadow_memkb %"PRId64")\n", b_info->shadow_memkb);
63ef543
+        fprintf(fh, "\t\t\t(pae %s)\n", libxl_defbool_to_string(b_info->u.hvm.pae));
63ef543
+        fprintf(fh, "\t\t\t(apic %s)\n",
63ef543
                libxl_defbool_to_string(b_info->u.hvm.apic));
63ef543
-        printf("\t\t\t(acpi %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(acpi %s)\n",
63ef543
                libxl_defbool_to_string(b_info->u.hvm.acpi));
63ef543
-        printf("\t\t\t(nx %s)\n", libxl_defbool_to_string(b_info->u.hvm.nx));
63ef543
-        printf("\t\t\t(viridian %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(nx %s)\n", libxl_defbool_to_string(b_info->u.hvm.nx));
63ef543
+        fprintf(fh, "\t\t\t(viridian %s)\n",
63ef543
                libxl_defbool_to_string(b_info->u.hvm.viridian));
63ef543
-        printf("\t\t\t(hpet %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(hpet %s)\n",
63ef543
                libxl_defbool_to_string(b_info->u.hvm.hpet));
63ef543
-        printf("\t\t\t(vpt_align %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(vpt_align %s)\n",
63ef543
                libxl_defbool_to_string(b_info->u.hvm.vpt_align));
63ef543
-        printf("\t\t\t(timer_mode %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(timer_mode %s)\n",
63ef543
                libxl_timer_mode_to_string(b_info->u.hvm.timer_mode));
63ef543
-        printf("\t\t\t(nestedhvm %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(nestedhvm %s)\n",
63ef543
                libxl_defbool_to_string(b_info->u.hvm.nested_hvm));
63ef543
-        printf("\t\t\t(stdvga %s)\n", b_info->u.hvm.vga.kind ==
63ef543
+        fprintf(fh, "\t\t\t(stdvga %s)\n", b_info->u.hvm.vga.kind ==
63ef543
                                       LIBXL_VGA_INTERFACE_TYPE_STD ?
63ef543
                                       "True" : "False");
63ef543
-        printf("\t\t\t(vnc %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(vnc %s)\n",
63ef543
                libxl_defbool_to_string(b_info->u.hvm.vnc.enable));
63ef543
-        printf("\t\t\t(vnclisten %s)\n", b_info->u.hvm.vnc.listen);
63ef543
-        printf("\t\t\t(vncdisplay %d)\n", b_info->u.hvm.vnc.display);
63ef543
-        printf("\t\t\t(vncunused %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(vnclisten %s)\n", b_info->u.hvm.vnc.listen);
63ef543
+        fprintf(fh, "\t\t\t(vncdisplay %d)\n", b_info->u.hvm.vnc.display);
63ef543
+        fprintf(fh, "\t\t\t(vncunused %s)\n",
63ef543
                libxl_defbool_to_string(b_info->u.hvm.vnc.findunused));
63ef543
-        printf("\t\t\t(keymap %s)\n", b_info->u.hvm.keymap);
63ef543
-        printf("\t\t\t(sdl %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(keymap %s)\n", b_info->u.hvm.keymap);
63ef543
+        fprintf(fh, "\t\t\t(sdl %s)\n",
63ef543
                libxl_defbool_to_string(b_info->u.hvm.sdl.enable));
63ef543
-        printf("\t\t\t(opengl %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(opengl %s)\n",
63ef543
                libxl_defbool_to_string(b_info->u.hvm.sdl.opengl));
63ef543
-        printf("\t\t\t(nographic %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(nographic %s)\n",
63ef543
                libxl_defbool_to_string(b_info->u.hvm.nographic));
63ef543
-        printf("\t\t\t(spice %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(spice %s)\n",
63ef543
                libxl_defbool_to_string(b_info->u.hvm.spice.enable));
63ef543
-        printf("\t\t\t(spiceport %d)\n", b_info->u.hvm.spice.port);
63ef543
-        printf("\t\t\t(spicetls_port %d)\n", b_info->u.hvm.spice.tls_port);
63ef543
-        printf("\t\t\t(spicehost %s)\n", b_info->u.hvm.spice.host);
63ef543
-        printf("\t\t\t(spicedisable_ticketing %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(spiceport %d)\n", b_info->u.hvm.spice.port);
63ef543
+        fprintf(fh, "\t\t\t(spicetls_port %d)\n", b_info->u.hvm.spice.tls_port);
63ef543
+        fprintf(fh, "\t\t\t(spicehost %s)\n", b_info->u.hvm.spice.host);
63ef543
+        fprintf(fh, "\t\t\t(spicedisable_ticketing %s)\n",
63ef543
                libxl_defbool_to_string(b_info->u.hvm.spice.disable_ticketing));
63ef543
-        printf("\t\t\t(spiceagent_mouse %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(spiceagent_mouse %s)\n",
63ef543
                libxl_defbool_to_string(b_info->u.hvm.spice.agent_mouse));
63ef543
 
63ef543
-        printf("\t\t\t(device_model %s)\n", b_info->device_model ? : "default");
63ef543
-        printf("\t\t\t(gfx_passthru %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(device_model %s)\n", b_info->device_model ? : "default");
63ef543
+        fprintf(fh, "\t\t\t(gfx_passthru %s)\n",
63ef543
                libxl_defbool_to_string(b_info->u.hvm.gfx_passthru));
63ef543
-        printf("\t\t\t(serial %s)\n", b_info->u.hvm.serial);
63ef543
-        printf("\t\t\t(boot %s)\n", b_info->u.hvm.boot);
63ef543
-        printf("\t\t\t(usb %s)\n", libxl_defbool_to_string(b_info->u.hvm.usb));
63ef543
-        printf("\t\t\t(usbdevice %s)\n", b_info->u.hvm.usbdevice);
63ef543
-        printf("\t\t)\n");
63ef543
+        fprintf(fh, "\t\t\t(serial %s)\n", b_info->u.hvm.serial);
63ef543
+        fprintf(fh, "\t\t\t(boot %s)\n", b_info->u.hvm.boot);
63ef543
+        fprintf(fh, "\t\t\t(usb %s)\n", libxl_defbool_to_string(b_info->u.hvm.usb));
63ef543
+        fprintf(fh, "\t\t\t(usbdevice %s)\n", b_info->u.hvm.usbdevice);
63ef543
+        fprintf(fh, "\t\t)\n");
63ef543
         break;
63ef543
     case LIBXL_DOMAIN_TYPE_PV:
63ef543
-        printf("\t\t(linux %d)\n", 0);
63ef543
-        printf("\t\t\t(kernel %s)\n", b_info->u.pv.kernel);
63ef543
-        printf("\t\t\t(cmdline %s)\n", b_info->u.pv.cmdline);
63ef543
-        printf("\t\t\t(ramdisk %s)\n", b_info->u.pv.ramdisk);
63ef543
-        printf("\t\t\t(e820_host %s)\n",
63ef543
+        fprintf(fh, "\t\t(linux %d)\n", 0);
63ef543
+        fprintf(fh, "\t\t\t(kernel %s)\n", b_info->u.pv.kernel);
63ef543
+        fprintf(fh, "\t\t\t(cmdline %s)\n", b_info->u.pv.cmdline);
63ef543
+        fprintf(fh, "\t\t\t(ramdisk %s)\n", b_info->u.pv.ramdisk);
63ef543
+        fprintf(fh, "\t\t\t(e820_host %s)\n",
63ef543
                libxl_defbool_to_string(b_info->u.pv.e820_host));
63ef543
-        printf("\t\t)\n");
63ef543
+        fprintf(fh, "\t\t)\n");
63ef543
         break;
63ef543
     default:
63ef543
         fprintf(stderr, "Unknown domain type %d\n", c_info->type);
63ef543
         exit(1);
63ef543
     }
63ef543
-    printf("\t)\n");
63ef543
+    fprintf(fh, "\t)\n");
63ef543
 
63ef543
     for (i = 0; i < d_config->num_disks; i++) {
63ef543
-        printf("\t(device\n");
63ef543
-        printf("\t\t(tap\n");
63ef543
-        printf("\t\t\t(backend_domid %d)\n", d_config->disks[i].backend_domid);
63ef543
-        printf("\t\t\t(frontend_domid %d)\n", domid);
63ef543
-        printf("\t\t\t(physpath %s)\n", d_config->disks[i].pdev_path);
63ef543
-        printf("\t\t\t(phystype %d)\n", d_config->disks[i].backend);
63ef543
-        printf("\t\t\t(virtpath %s)\n", d_config->disks[i].vdev);
63ef543
-        printf("\t\t\t(unpluggable %d)\n", d_config->disks[i].removable);
63ef543
-        printf("\t\t\t(readwrite %d)\n", d_config->disks[i].readwrite);
63ef543
-        printf("\t\t\t(is_cdrom %d)\n", d_config->disks[i].is_cdrom);
63ef543
-        printf("\t\t)\n");
63ef543
-        printf("\t)\n");
63ef543
+        fprintf(fh, "\t(device\n");
63ef543
+        fprintf(fh, "\t\t(tap\n");
63ef543
+        fprintf(fh, "\t\t\t(backend_domid %d)\n", d_config->disks[i].backend_domid);
63ef543
+        fprintf(fh, "\t\t\t(frontend_domid %d)\n", domid);
63ef543
+        fprintf(fh, "\t\t\t(physpath %s)\n", d_config->disks[i].pdev_path);
63ef543
+        fprintf(fh, "\t\t\t(phystype %d)\n", d_config->disks[i].backend);
63ef543
+        fprintf(fh, "\t\t\t(virtpath %s)\n", d_config->disks[i].vdev);
63ef543
+        fprintf(fh, "\t\t\t(unpluggable %d)\n", d_config->disks[i].removable);
63ef543
+        fprintf(fh, "\t\t\t(readwrite %d)\n", d_config->disks[i].readwrite);
63ef543
+        fprintf(fh, "\t\t\t(is_cdrom %d)\n", d_config->disks[i].is_cdrom);
63ef543
+        fprintf(fh, "\t\t)\n");
63ef543
+        fprintf(fh, "\t)\n");
63ef543
     }
63ef543
 
63ef543
     for (i = 0; i < d_config->num_nics; i++) {
63ef543
-        printf("\t(device\n");
63ef543
-        printf("\t\t(vif\n");
63ef543
+        fprintf(fh, "\t(device\n");
63ef543
+        fprintf(fh, "\t\t(vif\n");
63ef543
         if (d_config->nics[i].ifname)
63ef543
-            printf("\t\t\t(vifname %s)\n", d_config->nics[i].ifname);
63ef543
-        printf("\t\t\t(backend_domid %d)\n", d_config->nics[i].backend_domid);
63ef543
-        printf("\t\t\t(frontend_domid %d)\n", domid);
63ef543
-        printf("\t\t\t(devid %d)\n", d_config->nics[i].devid);
63ef543
-        printf("\t\t\t(mtu %d)\n", d_config->nics[i].mtu);
63ef543
-        printf("\t\t\t(model %s)\n", d_config->nics[i].model);
63ef543
-        printf("\t\t\t(mac %02x%02x%02x%02x%02x%02x)\n",
63ef543
+            fprintf(fh, "\t\t\t(vifname %s)\n", d_config->nics[i].ifname);
63ef543
+        fprintf(fh, "\t\t\t(backend_domid %d)\n", d_config->nics[i].backend_domid);
63ef543
+        fprintf(fh, "\t\t\t(frontend_domid %d)\n", domid);
63ef543
+        fprintf(fh, "\t\t\t(devid %d)\n", d_config->nics[i].devid);
63ef543
+        fprintf(fh, "\t\t\t(mtu %d)\n", d_config->nics[i].mtu);
63ef543
+        fprintf(fh, "\t\t\t(model %s)\n", d_config->nics[i].model);
63ef543
+        fprintf(fh, "\t\t\t(mac %02x%02x%02x%02x%02x%02x)\n",
63ef543
                d_config->nics[i].mac[0], d_config->nics[i].mac[1],
63ef543
                d_config->nics[i].mac[2], d_config->nics[i].mac[3],
63ef543
                d_config->nics[i].mac[4], d_config->nics[i].mac[5]);
63ef543
-        printf("\t\t)\n");
63ef543
-        printf("\t)\n");
63ef543
+        fprintf(fh, "\t\t)\n");
63ef543
+        fprintf(fh, "\t)\n");
63ef543
     }
63ef543
 
63ef543
     for (i = 0; i < d_config->num_pcidevs; i++) {
63ef543
-        printf("\t(device\n");
63ef543
-        printf("\t\t(pci\n");
63ef543
-        printf("\t\t\t(pci dev %04x:%02x:%02x.%01x@%02x)\n",
63ef543
+        fprintf(fh, "\t(device\n");
63ef543
+        fprintf(fh, "\t\t(pci\n");
63ef543
+        fprintf(fh, "\t\t\t(pci dev %04x:%02x:%02x.%01x@%02x)\n",
63ef543
                d_config->pcidevs[i].domain, d_config->pcidevs[i].bus,
63ef543
                d_config->pcidevs[i].dev, d_config->pcidevs[i].func,
63ef543
                d_config->pcidevs[i].vdevfn);
63ef543
-        printf("\t\t\t(opts msitranslate %d power_mgmt %d)\n",
63ef543
+        fprintf(fh, "\t\t\t(opts msitranslate %d power_mgmt %d)\n",
63ef543
                d_config->pcidevs[i].msitranslate,
63ef543
                d_config->pcidevs[i].power_mgmt);
63ef543
-        printf("\t\t)\n");
63ef543
-        printf("\t)\n");
63ef543
+        fprintf(fh, "\t\t)\n");
63ef543
+        fprintf(fh, "\t)\n");
63ef543
     }
63ef543
 
63ef543
     for (i = 0; i < d_config->num_vfbs; i++) {
63ef543
-        printf("\t(device\n");
63ef543
-        printf("\t\t(vfb\n");
63ef543
-        printf("\t\t\t(backend_domid %d)\n", d_config->vfbs[i].backend_domid);
63ef543
-        printf("\t\t\t(frontend_domid %d)\n", domid);
63ef543
-        printf("\t\t\t(devid %d)\n", d_config->vfbs[i].devid);
63ef543
-        printf("\t\t\t(vnc %s)\n",
63ef543
+        fprintf(fh, "\t(device\n");
63ef543
+        fprintf(fh, "\t\t(vfb\n");
63ef543
+        fprintf(fh, "\t\t\t(backend_domid %d)\n", d_config->vfbs[i].backend_domid);
63ef543
+        fprintf(fh, "\t\t\t(frontend_domid %d)\n", domid);
63ef543
+        fprintf(fh, "\t\t\t(devid %d)\n", d_config->vfbs[i].devid);
63ef543
+        fprintf(fh, "\t\t\t(vnc %s)\n",
63ef543
                libxl_defbool_to_string(d_config->vfbs[i].vnc.enable));
63ef543
-        printf("\t\t\t(vnclisten %s)\n", d_config->vfbs[i].vnc.listen);
63ef543
-        printf("\t\t\t(vncdisplay %d)\n", d_config->vfbs[i].vnc.display);
63ef543
-        printf("\t\t\t(vncunused %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(vnclisten %s)\n", d_config->vfbs[i].vnc.listen);
63ef543
+        fprintf(fh, "\t\t\t(vncdisplay %d)\n", d_config->vfbs[i].vnc.display);
63ef543
+        fprintf(fh, "\t\t\t(vncunused %s)\n",
63ef543
                libxl_defbool_to_string(d_config->vfbs[i].vnc.findunused));
63ef543
-        printf("\t\t\t(keymap %s)\n", d_config->vfbs[i].keymap);
63ef543
-        printf("\t\t\t(sdl %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(keymap %s)\n", d_config->vfbs[i].keymap);
63ef543
+        fprintf(fh, "\t\t\t(sdl %s)\n",
63ef543
                libxl_defbool_to_string(d_config->vfbs[i].sdl.enable));
63ef543
-        printf("\t\t\t(opengl %s)\n",
63ef543
+        fprintf(fh, "\t\t\t(opengl %s)\n",
63ef543
                libxl_defbool_to_string(d_config->vfbs[i].sdl.opengl));
63ef543
-        printf("\t\t\t(display %s)\n", d_config->vfbs[i].sdl.display);
63ef543
-        printf("\t\t\t(xauthority %s)\n", d_config->vfbs[i].sdl.xauthority);
63ef543
-        printf("\t\t)\n");
63ef543
-        printf("\t)\n");
63ef543
+        fprintf(fh, "\t\t\t(display %s)\n", d_config->vfbs[i].sdl.display);
63ef543
+        fprintf(fh, "\t\t\t(xauthority %s)\n", d_config->vfbs[i].sdl.xauthority);
63ef543
+        fprintf(fh, "\t\t)\n");
63ef543
+        fprintf(fh, "\t)\n");
63ef543
     }
63ef543
-    printf(")\n");
63ef543
+    fprintf(fh, ")\n");
63ef543
 }
63ef543
 
63ef543
 
63ef543
--- xen-4.5.0-rc1/tools/libxl/xl.h.orig	2014-10-24 15:22:40.000000000 +0100
63ef543
+++ xen-4.5.0-rc1/tools/libxl/xl.h	2014-11-26 22:30:58.416394082 +0000
63ef543
@@ -186,7 +186,7 @@
63ef543
 };
63ef543
 extern enum output_format default_output_format;
63ef543
 
63ef543
-extern void printf_info_sexp(int domid, libxl_domain_config *d_config);
63ef543
+extern void printf_info_sexp(int domid, libxl_domain_config *d_config, FILE *fh);
63ef543
 
63ef543
 #define XL_GLOBAL_CONFIG XEN_CONFIG_DIR "/xl.conf"
63ef543
 #define XL_LOCK_FILE XEN_LOCK_DIR "/xl"