Loading hw/g364fb.c +40 −12 Original line number Diff line number Diff line Loading @@ -293,7 +293,7 @@ static void g364fb_screen_dump(void *opaque, const char *filename, bool cswitch, Error **errp) { G364State *s = opaque; int y, x; int ret, y, x; uint8_t index; uint8_t *data_buffer; FILE *f; Loading @@ -301,35 +301,63 @@ static void g364fb_screen_dump(void *opaque, const char *filename, bool cswitch, qemu_flush_coalesced_mmio_buffer(); if (s->depth != 8) { error_report("g364: unknown guest depth %d", s->depth); error_setg(errp, "g364: unknown guest depth %d", s->depth); return; } f = fopen(filename, "wb"); if (!f) if (!f) { error_setg(errp, "failed to open file '%s': %s", filename, strerror(errno)); return; } if (s->ctla & CTLA_FORCE_BLANK) { /* blank screen */ fprintf(f, "P4\n%d %d\n", s->width, s->height); ret = fprintf(f, "P4\n%d %d\n", s->width, s->height); if (ret < 0) { goto write_err; } for (y = 0; y < s->height; y++) for (x = 0; x < s->width; x++) fputc(0, f); for (x = 0; x < s->width; x++) { ret = fputc(0, f); if (ret == EOF) { goto write_err; } } } else { data_buffer = s->vram + s->top_of_screen; fprintf(f, "P6\n%d %d\n%d\n", s->width, s->height, 255); ret = fprintf(f, "P6\n%d %d\n%d\n", s->width, s->height, 255); if (ret < 0) { goto write_err; } for (y = 0; y < s->height; y++) for (x = 0; x < s->width; x++, data_buffer++) { index = *data_buffer; fputc(s->color_palette[index][0], f); fputc(s->color_palette[index][1], f); fputc(s->color_palette[index][2], f); ret = fputc(s->color_palette[index][0], f); if (ret == EOF) { goto write_err; } ret = fputc(s->color_palette[index][1], f); if (ret == EOF) { goto write_err; } ret = fputc(s->color_palette[index][2], f); if (ret == EOF) { goto write_err; } } } out: fclose(f); return; write_err: error_setg(errp, "failed to write to file '%s': %s", filename, strerror(errno)); unlink(filename); goto out; } /* called for accesses to io ports */ Loading Loading
hw/g364fb.c +40 −12 Original line number Diff line number Diff line Loading @@ -293,7 +293,7 @@ static void g364fb_screen_dump(void *opaque, const char *filename, bool cswitch, Error **errp) { G364State *s = opaque; int y, x; int ret, y, x; uint8_t index; uint8_t *data_buffer; FILE *f; Loading @@ -301,35 +301,63 @@ static void g364fb_screen_dump(void *opaque, const char *filename, bool cswitch, qemu_flush_coalesced_mmio_buffer(); if (s->depth != 8) { error_report("g364: unknown guest depth %d", s->depth); error_setg(errp, "g364: unknown guest depth %d", s->depth); return; } f = fopen(filename, "wb"); if (!f) if (!f) { error_setg(errp, "failed to open file '%s': %s", filename, strerror(errno)); return; } if (s->ctla & CTLA_FORCE_BLANK) { /* blank screen */ fprintf(f, "P4\n%d %d\n", s->width, s->height); ret = fprintf(f, "P4\n%d %d\n", s->width, s->height); if (ret < 0) { goto write_err; } for (y = 0; y < s->height; y++) for (x = 0; x < s->width; x++) fputc(0, f); for (x = 0; x < s->width; x++) { ret = fputc(0, f); if (ret == EOF) { goto write_err; } } } else { data_buffer = s->vram + s->top_of_screen; fprintf(f, "P6\n%d %d\n%d\n", s->width, s->height, 255); ret = fprintf(f, "P6\n%d %d\n%d\n", s->width, s->height, 255); if (ret < 0) { goto write_err; } for (y = 0; y < s->height; y++) for (x = 0; x < s->width; x++, data_buffer++) { index = *data_buffer; fputc(s->color_palette[index][0], f); fputc(s->color_palette[index][1], f); fputc(s->color_palette[index][2], f); ret = fputc(s->color_palette[index][0], f); if (ret == EOF) { goto write_err; } ret = fputc(s->color_palette[index][1], f); if (ret == EOF) { goto write_err; } ret = fputc(s->color_palette[index][2], f); if (ret == EOF) { goto write_err; } } } out: fclose(f); return; write_err: error_setg(errp, "failed to write to file '%s': %s", filename, strerror(errno)); unlink(filename); goto out; } /* called for accesses to io ports */ Loading