pax for tar_file_sink

pax形式での出力にも対応しました。
ustar_file.hppの差分
tar_file.hppの差分

以前書いたとおり、paxの拡張ヘッダのフォーマットは、

"%d %s=%s\n", <length>, <keyword>, <value>

です。
出力時に面倒くさいのは<length>が、それ自身を含むことです。
例えば、"%s=%s\n"の部分が8バイトの"key=val\n"だとすると、長さの桁が増えるため、

10 key=val\n

でなく、

11 key=val\n

になります。
なんでこんなややこしいフォーマットになっているかは知りません。


その他、修正箇所。

  • pax形式拡張ヘッダのmtime,atime,ctimeの読み書き
  • 負のuid/gidの読み書き


これでtarの実装はほぼ終わりです。
次はzipいきますかね。