diff options
author | ths <ths@c046a42c-6fe2-441c-8c8c-71466251a162> | 2006-12-22 14:11:32 +0000 |
---|---|---|
committer | ths <ths@c046a42c-6fe2-441c-8c8c-71466251a162> | 2006-12-22 14:11:32 +0000 |
commit | fef3074347c02ed0c2fd9d1918402c966b909466 (patch) | |
tree | 1ca2beb79f94e3cc852dde85e49a4d5e49d7b430 | |
parent | bd491d6a4ecc57144ffa55c0daf97b43bc1648ce (diff) |
Escape filname printout properly, by Anthony Liguori and Julian Seward.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2263 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r-- | block.c | 9 | ||||
-rw-r--r-- | monitor.c | 27 | ||||
-rw-r--r-- | qemu-img.c | 5 | ||||
-rw-r--r-- | vl.h | 1 |
4 files changed, 39 insertions, 3 deletions
@@ -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) @@ -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; diff --git a/qemu-img.c b/qemu-img.c index 8b8da05652..23a698db73 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -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; @@ -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, |