IJGのライブラリにあるrdjpgcom.c の機能のJPEGの
[ヘッダー情報からJPEGのサイズを取得]を利用したいのですが、
エラーになると終了するようになっています。
一部抜粋
#define ERREXIT(msg) (fprintf(stderr, %s\n, msg), exit(EXIT_FAILURE))
static int
first_marker (void)
{
int c1, c2;
c1 = NEXTBYTE();
c2 = NEXTBYTE();
if (c1 != 0xFF || c2 != M_SOI) ERREXIT(Not a JPEG file);
return c2;
}
static int read_1_byte (void)
{
int c;
c = NEXTBYTE();
if (c == EOF) ERREXIT(Premature EOF in JPEG file);
return c;
}
などのERREXIT内のexitで終了します。
これを簡単に改造する方法ってありますか?
クラスで使用する関数にしたいのでエラーとして返ってほしいのですが。
宜しくお願いします。
#define ERREXIT(msg) (fprintf(stderr, %s\n, msg), exit(EXIT_FAILURE))
となっているので、
#define ERREXIT(msg) (fprintf(stderr, %s\n, msg), return -1)
とかに書き換えてみたらどうなりますか?
レスありがとうございます。
ERREXITを使用している関数の戻り値が
static void、static unsigned int
の場合もあるので無理そうです
JPEGのヘッダの構造がわからないのでエラー値としていくつを返してよいかわかりません。
何方か詳しい方、rdjpgcom.cを改造して使用した方いませんでしょうか
よろしくお願いします
あまりきれいではありませんが、setjmp、longjmpを使うというのはどうでしょうか?
IJG の example.c で使用しているので参考にしてみるのもいいかもしれません。
レスありがとうございます。
そうですよね、setjmp、longjmpを使用すればいいんですね。
チャレンジしてみます。
exitではなく、何らかのコールバック関数を呼ぶようにしておいて、
そのコールバック関数内で例外を発生させてみてはどうでしょうか。