PNG translator: fix gcc2 complaining about setjmp clobbering variables.
Fixes #12662.
This commit is contained in:
parent
863a6388b4
commit
1b29ad289e
@ -292,6 +292,18 @@ PNGTranslator::DerivedIdentify(BPositionIO *inSource,
|
|||||||
return identify_png_header(inSource, outInfo);
|
return identify_png_header(inSource, outInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Workaround for gcc2 complaining about clobbered variables when we do a
|
||||||
|
// setjmp, even though the variables are not accessed when returning from
|
||||||
|
// a longjmp. Moving setjmp to a different function is enough to hide the
|
||||||
|
// problem from gcc2.
|
||||||
|
static int
|
||||||
|
setjmp_wrapper(jmp_buf buf)
|
||||||
|
{
|
||||||
|
return setjmp(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
PNGTranslator::translate_from_png_to_bits(BPositionIO *inSource,
|
PNGTranslator::translate_from_png_to_bits(BPositionIO *inSource,
|
||||||
BPositionIO *outDestination)
|
BPositionIO *outDestination)
|
||||||
@ -322,7 +334,7 @@ PNGTranslator::translate_from_png_to_bits(BPositionIO *inSource,
|
|||||||
if (!pinfo)
|
if (!pinfo)
|
||||||
break;
|
break;
|
||||||
// set error handling
|
// set error handling
|
||||||
if (setjmp(png_jmpbuf(ppng)))
|
if (setjmp_wrapper(png_jmpbuf(ppng)))
|
||||||
// When an error occurs in libpng, it uses
|
// When an error occurs in libpng, it uses
|
||||||
// the longjmp function to continue execution
|
// the longjmp function to continue execution
|
||||||
// from this point
|
// from this point
|
||||||
@ -829,7 +841,7 @@ PNGTranslator::translate_from_bits_to_png(BPositionIO *inSource,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// set error handling
|
// set error handling
|
||||||
if (setjmp(png_jmpbuf(ppng))) {
|
if (setjmp_wrapper(png_jmpbuf(ppng))) {
|
||||||
// When an error occurs in libpng, it uses
|
// When an error occurs in libpng, it uses
|
||||||
// the longjmp function to continue execution
|
// the longjmp function to continue execution
|
||||||
// from this point
|
// from this point
|
||||||
|
Loading…
Reference in New Issue
Block a user