summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--base/gdevp14.c3
-rw-r--r--psi/zdevice.c18
2 files changed, 18 insertions, 3 deletions
diff --git a/base/gdevp14.c b/base/gdevp14.c
index 3019131c7..537a56475 100644
--- a/base/gdevp14.c
+++ b/base/gdevp14.c
@@ -5617,7 +5617,8 @@ pdf14_dev_spec_op(gx_device *pdev, int dev_spec_op,
5617 return 0; 5617 return 0;
5618 } 5618 }
5619 } 5619 }
5620 if (dev_spec_op == gxdso_get_dev_param || dev_spec_op == gxdso_restrict_bbox) { 5620 if (dev_spec_op == gxdso_get_dev_param || dev_spec_op == gxdso_restrict_bbox
5621 || dev_spec_op == gxdso_current_output_device) {
5621 return dev_proc(p14dev->target, dev_spec_op)(p14dev->target, dev_spec_op, data, size); 5622 return dev_proc(p14dev->target, dev_spec_op)(p14dev->target, dev_spec_op, data, size);
5622 } 5623 }
5623 5624
diff --git a/psi/zdevice.c b/psi/zdevice.c
index 7ede0a181..bd2c542fb 100644
--- a/psi/zdevice.c
+++ b/psi/zdevice.c
@@ -509,16 +509,30 @@ int
509zsetdevice(i_ctx_t *i_ctx_p) 509zsetdevice(i_ctx_t *i_ctx_p)
510{ 510{
511 gx_device *odev = NULL, *dev = gs_currentdevice(igs); 511 gx_device *odev = NULL, *dev = gs_currentdevice(igs);
512 gx_device *ndev = NULL;
512 os_ptr op = osp; 513 os_ptr op = osp;
513 int code = dev_proc(dev, dev_spec_op)(dev, 514 int code = dev_proc(dev, dev_spec_op)(dev,
514 gxdso_current_output_device, (void *)&odev, 0); 515 gxdso_current_output_device, (void *)&odev, 0);
515 516
516 if (code < 0) 517 if (code < 0)
517 return code; 518 return code;
518
519 check_write_type(*op, t_device); 519 check_write_type(*op, t_device);
520
521 /* slightly icky special case: the new device may not have had
522 * it's procs initialised, at this point - but we need to check
523 * whether we're being asked to change the device here
524 */
525 if (dev_proc((op->value.pdevice), dev_spec_op) == NULL)
526 ndev = op->value.pdevice;
527 else
528 code = dev_proc((op->value.pdevice), dev_spec_op)(op->value.pdevice,
529 gxdso_current_output_device, (void *)&ndev, 0);
530
531 if (code < 0)
532 return code;
533
520 if (odev->LockSafetyParams) { /* do additional checking if locked */ 534 if (odev->LockSafetyParams) { /* do additional checking if locked */
521 if(op->value.pdevice != odev) /* don't allow a different device */ 535 if(ndev != odev) /* don't allow a different device */
522 return_error(gs_error_invalidaccess); 536 return_error(gs_error_invalidaccess);
523 } 537 }
524 dev->ShowpageCount = 0; 538 dev->ShowpageCount = 0;