Link Search Menu Expand Document

サマリ:base64のソースコードリーディング6回目

base64を読もう⑥

decodeがそろそろ終わりそうです。

          if (k == 1 && ctx.i == 0)
            break;

ctx.iが0になるのは、 base_decode_ctx_init (&ctx);で初期化されたままの状態である場合。kが1になるのはファイルの終端に達した場合の2回目のループなので、「ファイルの終端に達し、コンテキストに何も入っていない場合はここで終了する」。

          n = DEC_BLOCKSIZE;
          ok = base_decode_ctx (&ctx, inbuf, (k == 0 ? sum : 0), outbuf, &n);

DEC_BLOCKSIZEは前述の通り、6828が既定。

base_decode_ctx../gnulib/lib/base64.hで定義され、../gnulib/lib/base64.cに実体がある。

          if (fwrite (outbuf, 1, n, out) < n)
            error (EXIT_FAILURE, errno, _("write error"));

          if (!ok)
            error (EXIT_FAILURE, 0, _("invalid input"));

fwriteoutbufから1バイト単位でnバイトをoutストリームに書き込む。エラーが生じた場合はnより小さな値が返される。

以上でデコード処理は終わり。

###理解できたこと

ここでの処理はファイル(もしくは標準入力)からデータを読み込み、ファイル(もしくは標準出力)にデータを出力するのみ。それ以外はgnulibで全てを賄っている。

###宿題

base_decode_ctxの詳細を少し追う。

以上。今日から4月。今日から入社の若者をたくさん見ました。辛いこともいっぱいあるけど、楽しいこともたくさんあるので頑張ってください。


Back to top

Copyright © 2021- Akira Otaka All rights reserved.