mirror of https://github.com/xemu-project/xemu.git
g364fb: g364fb_screen_dump(): add error handling
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
parent
d9c7ebb100
commit
61a3f955c1
52
hw/g364fb.c
52
hw/g364fb.c
|
@ -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;
|
||||
|
@ -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…
Reference in New Issue