summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'devices/gdev4693.c')
-rw-r--r--devices/gdev4693.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/devices/gdev4693.c b/devices/gdev4693.c
index 7e18054f..baa975c5 100644
--- a/devices/gdev4693.c
+++ b/devices/gdev4693.c
@@ -83,7 +83,7 @@ t4693d_print_page(gx_device_printer *dev, gp_file *ps_stream)
char *p;
ushort data_size = line_size/prn_dev->width;
int checksum;
- int lnum;
+ int lnum, code = 0;
int i;
#if !ARCH_IS_BIG_ENDIAN
byte swap;
@@ -121,12 +121,14 @@ t4693d_print_page(gx_device_printer *dev, gp_file *ps_stream)
/* write header */
if (gp_fwrite(header,1,22,ps_stream) != 22) {
errprintf(dev->memory, "Could not write header (t4693d).\n");
- gs_free(dev->memory, data, line_size, 1, "t4693d_print_page");
- return_error(gs_error_ioerror);
+ code = gs_note_error(gs_error_ioerror);
+ goto xit;
}
for (lnum = 0; lnum < prn_dev->height; lnum++) {
- gdev_prn_copy_scan_lines(prn_dev,lnum,data,line_size);
+ code = gdev_prn_copy_scan_lines(prn_dev,lnum,data,line_size);
+ if (code < 0)
+ goto xit;
for (i = 0; i < line_size; i += data_size) {
@@ -147,32 +149,33 @@ t4693d_print_page(gx_device_printer *dev, gp_file *ps_stream)
break;
default:
errprintf(dev->memory,"Bad depth (%d) t4693d.\n",depth);
- gs_free(dev->memory, data, line_size, 1, "t4693d_print_page");
- return_error(gs_error_rangecheck);
+ code = gs_note_error(gs_error_rangecheck);
+ goto xit;
}
if (gp_fwrite(&data[i],1,data_size,ps_stream) != data_size) {
errprintf(dev->memory,"Could not write pixel (t4693d).\n");
- gs_free(dev->memory, data, line_size, 1, "t4693d_print_page");
- return_error(gs_error_ioerror);
+ code = gs_note_error(gs_error_ioerror);
+ goto xit;
}
}
if (gp_fputc(0x02,ps_stream) != 0x02) {
errprintf(dev->memory,"Could not write EOL (t4693d).\n");
- gs_free(dev->memory, data, line_size, 1, "t4693d_print_page");
- return_error(gs_error_ioerror);
+ code = gs_note_error(gs_error_ioerror);
+ goto xit;
}
}
if (gp_fputc(0x01,ps_stream) != 0x01) {
errprintf(dev->memory,"Could not write EOT (t4693d).\n");
- gs_free(dev->memory, data, line_size, 1, "t4693d_print_page");
- return_error(gs_error_ioerror);
+ code = gs_note_error(gs_error_ioerror);
+ /* fall through to xit: */
}
+xit:
gs_free(dev->memory, data, line_size, 1, "t4693d_print_page");
- return(0);
+ return(code);
}