]> git.proxmox.com Git - qemu.git/commitdiff
Escape filname printout properly, by Anthony Liguori and Julian Seward.
authorths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>
Fri, 22 Dec 2006 14:11:32 +0000 (14:11 +0000)
committerths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>
Fri, 22 Dec 2006 14:11:32 +0000 (14:11 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2263 c046a42c-6fe2-441c-8c8c-71466251a162

block.c
monitor.c
qemu-img.c
vl.h

diff --git a/block.c b/block.c
index fdaba4bcafee4a0ee8a959d8607e9e9d53c60749..9aebaa0a4e2f0bc11d153122a4cb8cd41e4883c6 100644 (file)
--- a/block.c
+++ b/block.c
@@ -868,9 +868,12 @@ void bdrv_info(void)
             term_printf(" locked=%d", bs->locked);
         }
         if (bs->drv) {
-            term_printf(" file=%s", bs->filename);
-            if (bs->backing_file[0] != '\0')
-                term_printf(" backing_file=%s", bs->backing_file);
+            term_printf(" file=");
+           term_print_filename(bs->filename);
+            if (bs->backing_file[0] != '\0') {
+                term_printf(" backing_file=");
+               term_print_filename(bs->backing_file);
+           }
             term_printf(" ro=%d", bs->read_only);
             term_printf(" drv=%s", bs->drv->format_name);
             if (bs->encrypted)
index f2a2417ddde073d806341a72b815dc134da825c7..d553ce60770f07a555c270560490fabaef0b8d50 100644 (file)
--- a/monitor.c
+++ b/monitor.c
@@ -106,6 +106,33 @@ void term_printf(const char *fmt, ...)
     va_end(ap);
 }
 
+void term_print_filename(const char *filename)
+{
+    int i;
+
+    for (i = 0; filename[i]; i++) {
+       switch (filename[i]) {
+       case ' ':
+       case '"':
+       case '\\':
+           term_printf("\\%c", filename[i]);
+           break;
+       case '\t':
+           term_printf("\\t");
+           break;
+       case '\r':
+           term_printf("\\r");
+           break;
+       case '\n':
+           term_printf("\\n");
+           break;
+       default:
+           term_printf("%c", filename[i]);
+           break;
+       }
+    }
+}
+
 static int monitor_fprintf(FILE *stream, const char *fmt, ...)
 {
     va_list ap;
index 8b8da0565278d6edac549a67d5b625d2b79aaef1..23a698db73c87ffe102782bf3109be162a5207bf 100644 (file)
@@ -113,6 +113,11 @@ void term_printf(const char *fmt, ...)
     va_end(ap);
 }
 
+void term_print_filename(const char *filename)
+{
+    term_printf(filename);
+}
+
 void __attribute__((noreturn)) error(const char *fmt, ...) 
 {
     va_list ap;
diff --git a/vl.h b/vl.h
index 52957f62462765205c134f88924629f30263db6a..5f13dcd7db8b2be8173d01623cb44fb189bf2789 100644 (file)
--- a/vl.h
+++ b/vl.h
@@ -1318,6 +1318,7 @@ void monitor_init(CharDriverState *hd, int show_banner);
 void term_puts(const char *str);
 void term_vprintf(const char *fmt, va_list ap);
 void term_printf(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
+void term_print_filename(const char *filename);
 void term_flush(void);
 void term_print_help(void);
 void monitor_readline(const char *prompt, int is_password,