Loading hw/blizzard.c +1 −1 Original line number Diff line number Diff line Loading @@ -939,7 +939,7 @@ static void blizzard_screen_dump(void *opaque, const char *filename, blizzard_update_display(opaque); if (s && ds_get_data(s->state)) ppm_save(filename, s->state->surface); ppm_save(filename, s->state->surface, errp); } #define DEPTH 8 Loading hw/qxl.c +1 −1 Original line number Diff line number Diff line Loading @@ -1605,7 +1605,7 @@ static void qxl_hw_screen_dump(void *opaque, const char *filename, bool cswitch, case QXL_MODE_COMPAT: case QXL_MODE_NATIVE: qxl_render_update(qxl); ppm_save(filename, qxl->ssd.ds->surface); ppm_save(filename, qxl->ssd.ds->surface, errp); break; case QXL_MODE_VGA: vga->screen_dump(vga, filename, cswitch, errp); Loading hw/vga.c +25 −7 Original line number Diff line number Diff line Loading @@ -2390,7 +2390,7 @@ void vga_init_vbe(VGACommonState *s, MemoryRegion *system_memory) /********************************************************/ /* vga screen dump */ int ppm_save(const char *filename, struct DisplaySurface *ds) void ppm_save(const char *filename, struct DisplaySurface *ds, Error **errp) { FILE *f; uint8_t *d, *d1; Loading @@ -2402,10 +2402,16 @@ int ppm_save(const char *filename, struct DisplaySurface *ds) trace_ppm_save(filename, ds); f = fopen(filename, "wb"); if (!f) return -1; fprintf(f, "P6\n%d %d\n%d\n", ds->width, ds->height, 255); if (!f) { error_setg(errp, "failed to open file '%s': %s", filename, strerror(errno)); return; } ret = fprintf(f, "P6\n%d %d\n%d\n", ds->width, ds->height, 255); if (ret < 0) { linebuf = NULL; goto write_err; } linebuf = g_malloc(ds->width * 3); d1 = ds->data; for(y = 0; y < ds->height; y++) { Loading @@ -2426,12 +2432,24 @@ int ppm_save(const char *filename, struct DisplaySurface *ds) d += ds->pf.bytes_per_pixel; } d1 += ds->linesize; clearerr(f); ret = fwrite(linebuf, 1, pbuf - linebuf, f); (void)ret; if (ferror(f)) { goto write_err; } } out: g_free(linebuf); fclose(f); return 0; return; write_err: error_setg(errp, "failed to write to file '%s': %s", filename, strerror(errno)); unlink(filename); goto out; } /* save the vga display in a PPM image even if no display is Loading @@ -2445,5 +2463,5 @@ static void vga_screen_dump(void *opaque, const char *filename, bool cswitch, vga_invalidate_display(s); } vga_hw_update(); ppm_save(filename, s->ds->surface); ppm_save(filename, s->ds->surface, errp); } hw/vga_int.h +2 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ */ #include <hw/hw.h> #include "error.h" #include "memory.h" #define ST01_V_RETRACE 0x08 Loading Loading @@ -204,7 +205,7 @@ void vga_ioport_write(void *opaque, uint32_t addr, uint32_t val); uint32_t vga_mem_readb(VGACommonState *s, target_phys_addr_t addr); void vga_mem_writeb(VGACommonState *s, target_phys_addr_t addr, uint32_t val); void vga_invalidate_scanlines(VGACommonState *s, int y1, int y2); int ppm_save(const char *filename, struct DisplaySurface *ds); void ppm_save(const char *filename, struct DisplaySurface *ds, Error **errp); int vga_ioport_invalid(VGACommonState *s, uint32_t addr); void vga_init_vbe(VGACommonState *s, MemoryRegion *address_space); Loading hw/vmware_vga.c +1 −1 Original line number Diff line number Diff line Loading @@ -1015,7 +1015,7 @@ static void vmsvga_screen_dump(void *opaque, const char *filename, bool cswitch, if (s->depth == 32) { DisplaySurface *ds = qemu_create_displaysurface_from(s->width, s->height, 32, ds_get_linesize(s->vga.ds), s->vga.vram_ptr); ppm_save(filename, ds); ppm_save(filename, ds, errp); g_free(ds); } } Loading Loading
hw/blizzard.c +1 −1 Original line number Diff line number Diff line Loading @@ -939,7 +939,7 @@ static void blizzard_screen_dump(void *opaque, const char *filename, blizzard_update_display(opaque); if (s && ds_get_data(s->state)) ppm_save(filename, s->state->surface); ppm_save(filename, s->state->surface, errp); } #define DEPTH 8 Loading
hw/qxl.c +1 −1 Original line number Diff line number Diff line Loading @@ -1605,7 +1605,7 @@ static void qxl_hw_screen_dump(void *opaque, const char *filename, bool cswitch, case QXL_MODE_COMPAT: case QXL_MODE_NATIVE: qxl_render_update(qxl); ppm_save(filename, qxl->ssd.ds->surface); ppm_save(filename, qxl->ssd.ds->surface, errp); break; case QXL_MODE_VGA: vga->screen_dump(vga, filename, cswitch, errp); Loading
hw/vga.c +25 −7 Original line number Diff line number Diff line Loading @@ -2390,7 +2390,7 @@ void vga_init_vbe(VGACommonState *s, MemoryRegion *system_memory) /********************************************************/ /* vga screen dump */ int ppm_save(const char *filename, struct DisplaySurface *ds) void ppm_save(const char *filename, struct DisplaySurface *ds, Error **errp) { FILE *f; uint8_t *d, *d1; Loading @@ -2402,10 +2402,16 @@ int ppm_save(const char *filename, struct DisplaySurface *ds) trace_ppm_save(filename, ds); f = fopen(filename, "wb"); if (!f) return -1; fprintf(f, "P6\n%d %d\n%d\n", ds->width, ds->height, 255); if (!f) { error_setg(errp, "failed to open file '%s': %s", filename, strerror(errno)); return; } ret = fprintf(f, "P6\n%d %d\n%d\n", ds->width, ds->height, 255); if (ret < 0) { linebuf = NULL; goto write_err; } linebuf = g_malloc(ds->width * 3); d1 = ds->data; for(y = 0; y < ds->height; y++) { Loading @@ -2426,12 +2432,24 @@ int ppm_save(const char *filename, struct DisplaySurface *ds) d += ds->pf.bytes_per_pixel; } d1 += ds->linesize; clearerr(f); ret = fwrite(linebuf, 1, pbuf - linebuf, f); (void)ret; if (ferror(f)) { goto write_err; } } out: g_free(linebuf); fclose(f); return 0; return; write_err: error_setg(errp, "failed to write to file '%s': %s", filename, strerror(errno)); unlink(filename); goto out; } /* save the vga display in a PPM image even if no display is Loading @@ -2445,5 +2463,5 @@ static void vga_screen_dump(void *opaque, const char *filename, bool cswitch, vga_invalidate_display(s); } vga_hw_update(); ppm_save(filename, s->ds->surface); ppm_save(filename, s->ds->surface, errp); }
hw/vga_int.h +2 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ */ #include <hw/hw.h> #include "error.h" #include "memory.h" #define ST01_V_RETRACE 0x08 Loading Loading @@ -204,7 +205,7 @@ void vga_ioport_write(void *opaque, uint32_t addr, uint32_t val); uint32_t vga_mem_readb(VGACommonState *s, target_phys_addr_t addr); void vga_mem_writeb(VGACommonState *s, target_phys_addr_t addr, uint32_t val); void vga_invalidate_scanlines(VGACommonState *s, int y1, int y2); int ppm_save(const char *filename, struct DisplaySurface *ds); void ppm_save(const char *filename, struct DisplaySurface *ds, Error **errp); int vga_ioport_invalid(VGACommonState *s, uint32_t addr); void vga_init_vbe(VGACommonState *s, MemoryRegion *address_space); Loading
hw/vmware_vga.c +1 −1 Original line number Diff line number Diff line Loading @@ -1015,7 +1015,7 @@ static void vmsvga_screen_dump(void *opaque, const char *filename, bool cswitch, if (s->depth == 32) { DisplaySurface *ds = qemu_create_displaysurface_from(s->width, s->height, 32, ds_get_linesize(s->vga.ds), s->vga.vram_ptr); ppm_save(filename, ds); ppm_save(filename, ds, errp); g_free(ds); } } Loading