IJGのライブラリにある rdjpgcom.c を使用した事ありますか?

[戻る]
ナオーバ 2002/09/30(月) 06:58:32
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で終了します。

これを簡単に改造する方法ってありますか?
クラスで使用する関数にしたいのでエラーとして返ってほしいのですが。

宜しくお願いします。

beginner 2002/09/30(月) 09:03:52
#define ERREXIT(msg)    (fprintf(stderr, "%s\n", msg), exit(EXIT_FAILURE))

となっているので、

#define ERREXIT(msg)    (fprintf(stderr, "%s\n", msg), return -1)

とかに書き換えてみたらどうなりますか?

ナオーバ 2002/09/30(月) 09:47:19
レスありがとうございます。

ERREXITを使用している関数の戻り値が
  static void、static unsigned int
の場合もあるので無理そうです

JPEGのヘッダの構造がわからないのでエラー値としていくつを返してよいかわかりません。

何方か詳しい方、rdjpgcom.cを改造して使用した方いませんでしょうか

よろしくお願いします

chemo 2002/10/01(火) 16:04:57
あまりきれいではありませんが、setjmp、longjmpを使うというのはどうでしょうか?
IJG の example.c で使用しているので参考にしてみるのもいいかもしれません。

ナオーバ 2002/10/03(木) 02:03:05
[[解決]]
レスありがとうございます。

そうですよね、setjmp、longjmpを使用すればいいんですね。
チャレンジしてみます。

MASATO [E-Mail] [HomePage] 2002/10/03(木) 08:08:03
exitではなく、何らかのコールバック関数を呼ぶようにしておいて、
そのコールバック関数内で例外を発生させてみてはどうでしょうか。

古いスレッドには追加発言できません。