--- gs-esp-8.15.1.dfsg.1.orig/src/sdct.h +++ gs-esp-8.15.1.dfsg.1/src/sdct.h @@ -21,7 +21,7 @@ #ifndef sdct_INCLUDED # define sdct_INCLUDED -#include /* for jmp_buf */ +#include "gsfix-setjmp.h" /* for jmp_buf */ /* ------ DCT filters ------ */ --- gs-esp-8.15.1.dfsg.1.orig/src/gp_os2.c +++ gs-esp-8.15.1.dfsg.1/src/gp_os2.c @@ -72,7 +72,7 @@ #ifdef __DLL__ /* use longjmp instead of exit when using DLL */ -#include +#include "gsfix-setjmp.h" extern jmp_buf gsdll_env; #endif --- gs-esp-8.15.1.dfsg.1.orig/src/gdevxini.c +++ gs-esp-8.15.1.dfsg.1/src/gdevxini.c @@ -893,9 +893,13 @@ if (ecode < 0) return ecode; - /* Unless we specified a new window ID, */ + /* Unless we specified a new window ID or size, */ /* prevent gx_default_put_params from closing the device. */ - if (pwin == (long)xdev->pwin) + /* (changed size may require us to rebuild the buffer + * (see x_set_buffer). */ + if (pwin == (long)xdev->pwin && + xdev->width == values.width && + xdev->height == values.height) dev->is_open = false; xdev->IsPageDevice = values.IsPageDevice; code = gx_default_put_params(dev, plist); --- gs-esp-8.15.1.dfsg.1.orig/src/genarch.c +++ gs-esp-8.15.1.dfsg.1/src/genarch.c @@ -30,7 +30,8 @@ */ #include #include -#include + +#include "gsfix-setjmp.h" /* We should write the result on stdout, but the original Turbo C 'make' */ /* can't handle output redirection (sigh). */ --- gs-esp-8.15.1.dfsg.1.orig/src/gsfix-setjmp.h +++ gs-esp-8.15.1.dfsg.1/src/gsfix-setjmp.h @@ -0,0 +1,35 @@ +#ifndef GSFIX_SETJMP_H +#define GSFIX_SETJMP_H + +#include + +typedef struct { + char c; + jmp_buf j; +} gsfix_jmp_buf_test; + +#define gsfix_jmp_buf_align ((size_t)&((gsfix_jmp_buf_test*)0)->j) + +typedef struct { + unsigned char stuff[sizeof(jmp_buf) + gsfix_jmp_buf_align]; +} gsfix_jmp_buf; + +#define gsfix_orig_jmp_buf jmp_buf +#define gsfix_orig_setjmp(x) setjmp(x) +#define gsfix_orig_longjmp(x,y) longjmp((x),(y)) + +#undef jmp_buf +#undef setjmp +#undef longjmp + +#define jmp_buf gsfix_jmp_buf +#define setjmp(x) (gsfix_orig_setjmp(find_jmp_buf((x)))) +#define longjmp(x,val) (gsfix_orig_longjmp(find_jmp_buf((x)),(val))) + +#define find_jmp_buf(gsfjb) \ + ( \ + ((size_t)(gsfjb).stuff + gsfix_jmp_buf_align) \ + & ~(size_t)(gsfix_jmp_buf_align-1) \ + ) + +#endif /*GSFIX_SETJMP_H*/