KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm using libjpeg right now to save JPEG images. If there is an error, libjpeg's default behavior is to call exit() , which I want to avoid since it's not a fatal error for my program. libjpeg allows you to use your own error manager , and mandates that if you use your own error_exit() function (which calls exit() by default) you must not return control to the caller. libjpeg suggests using setjmp.h to meet this requirement and not exit() the program. However, I am writing a C++ program, and I have access to exceptions. This question's answer states it's safe (as in well-defined behavior) to throw an exception from the callback. But it doesn't mention dynamic libraries, and there's a general rule of thumb that you don't throw exceptions across dynamic library boundaries. Here's an example: #include <iostream> #include <jpeglib.h> #include <cstdio> #include <stdexcept> static void handleLibJpegFatalError(j_common_ptr cinfo) { (*cinfo->err->output_message)(cinfo); throw std::runtime_error("error in libjpeg, check stderr"); } int main() { struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; FILE* file = std::fopen("out.jpeg", "wb"); // assume this doesn't fail for this example try { cinfo.err = jpeg_std_error(&jerr); jerr.error_exit = handleLibJpegFatalError; // let's say this triggers a fatal error in libjpeg and handleLibJpegFatalError() is called // by libjpeg jpeg_create_compress(&cinfo); } catch (...) { std::cerr &l
Tags (comma-separated)
Save Edits
Cancel