Patchwork vga: Fix text mode screendumps

login
register
mail settings
Submitter Jan Kiszka
Date Sept. 15, 2011, 10:47 p.m.
Message ID <4E72809B.8000209@web.de>
Download mbox | patch
Permalink /patch/114840/
State New
Headers show

Comments

Jan Kiszka - Sept. 15, 2011, 10:47 p.m.
From: Jan Kiszka <jan.kiszka@siemens.com>

In text mode, even a full refresh of the screen takes multiple updates.
As we reset the dump file pointer after the first call, we only wrote
the first line.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 hw/vga.c |    7 +++----
 1 files changed, 3 insertions(+), 4 deletions(-)
Andriy Gapon - Sept. 16, 2011, 3:12 p.m.
on 16/09/2011 01:47 Jan Kiszka said the following:
> From: Jan Kiszka <jan.kiszka@siemens.com>
> 
> In text mode, even a full refresh of the screen takes multiple updates.
> As we reset the dump file pointer after the first call, we only wrote
> the first line.

Thank you very much!
I can confirm that with the patch I get a complete screen dump.

> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> ---
>  hw/vga.c |    7 +++----
>  1 files changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/hw/vga.c b/hw/vga.c
> index 0a0c5a6..f9a6014 100644
> --- a/hw/vga.c
> +++ b/hw/vga.c
> @@ -149,7 +149,7 @@ static uint16_t expand2[256];
>  static uint8_t expand4to8[16];
>  
>  static void vga_screen_dump(void *opaque, const char *filename);
> -static char *screen_dump_filename;
> +static const char *screen_dump_filename;
>  static DisplayChangeListener *screen_dump_dcl;
>  
>  static void vga_update_memory_access(VGACommonState *s)
> @@ -2319,7 +2319,6 @@ static void vga_save_dpy_update(DisplayState *ds,
>  {
>      if (screen_dump_filename) {
>          ppm_save(screen_dump_filename, ds->surface);
> -        screen_dump_filename = NULL;
>      }
>  }
>  
> @@ -2397,8 +2396,8 @@ static void vga_screen_dump(void *opaque, const char *filename)
>      if (!screen_dump_dcl)
>          screen_dump_dcl = vga_screen_dump_init(s->ds);
>  
> -    screen_dump_filename = (char *)filename;
> +    screen_dump_filename = filename;
>      vga_invalidate_display(s);
>      vga_hw_update();
> +    screen_dump_filename = NULL;
>  }
> -
Anthony Liguori - Sept. 23, 2011, 2:43 p.m.
On 09/15/2011 05:47 PM, Jan Kiszka wrote:
> From: Jan Kiszka<jan.kiszka@siemens.com>
>
> In text mode, even a full refresh of the screen takes multiple updates.
> As we reset the dump file pointer after the first call, we only wrote
> the first line.
>
> Signed-off-by: Jan Kiszka<jan.kiszka@siemens.com>

Applied.  Thanks.

Regards,

Anthony Liguori

> ---
>   hw/vga.c |    7 +++----
>   1 files changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/hw/vga.c b/hw/vga.c
> index 0a0c5a6..f9a6014 100644
> --- a/hw/vga.c
> +++ b/hw/vga.c
> @@ -149,7 +149,7 @@ static uint16_t expand2[256];
>   static uint8_t expand4to8[16];
>
>   static void vga_screen_dump(void *opaque, const char *filename);
> -static char *screen_dump_filename;
> +static const char *screen_dump_filename;
>   static DisplayChangeListener *screen_dump_dcl;
>
>   static void vga_update_memory_access(VGACommonState *s)
> @@ -2319,7 +2319,6 @@ static void vga_save_dpy_update(DisplayState *ds,
>   {
>       if (screen_dump_filename) {
>           ppm_save(screen_dump_filename, ds->surface);
> -        screen_dump_filename = NULL;
>       }
>   }
>
> @@ -2397,8 +2396,8 @@ static void vga_screen_dump(void *opaque, const char *filename)
>       if (!screen_dump_dcl)
>           screen_dump_dcl = vga_screen_dump_init(s->ds);
>
> -    screen_dump_filename = (char *)filename;
> +    screen_dump_filename = filename;
>       vga_invalidate_display(s);
>       vga_hw_update();
> +    screen_dump_filename = NULL;
>   }
> -
>
>

Patch

diff --git a/hw/vga.c b/hw/vga.c
index 0a0c5a6..f9a6014 100644
--- a/hw/vga.c
+++ b/hw/vga.c
@@ -149,7 +149,7 @@  static uint16_t expand2[256];
 static uint8_t expand4to8[16];
 
 static void vga_screen_dump(void *opaque, const char *filename);
-static char *screen_dump_filename;
+static const char *screen_dump_filename;
 static DisplayChangeListener *screen_dump_dcl;
 
 static void vga_update_memory_access(VGACommonState *s)
@@ -2319,7 +2319,6 @@  static void vga_save_dpy_update(DisplayState *ds,
 {
     if (screen_dump_filename) {
         ppm_save(screen_dump_filename, ds->surface);
-        screen_dump_filename = NULL;
     }
 }
 
@@ -2397,8 +2396,8 @@  static void vga_screen_dump(void *opaque, const char *filename)
     if (!screen_dump_dcl)
         screen_dump_dcl = vga_screen_dump_init(s->ds);
 
-    screen_dump_filename = (char *)filename;
+    screen_dump_filename = filename;
     vga_invalidate_display(s);
     vga_hw_update();
+    screen_dump_filename = NULL;
 }
-