{"id":32137005,"url":"https://github.com/jca02266/lha","last_synced_at":"2025-10-21T04:56:58.898Z","repository":{"id":26083422,"uuid":"29527368","full_name":"jca02266/lha","owner":"jca02266","description":"LHa for UNIX - Note: This software is licensed under the ORIGINAL LICENSE. It is written in man/lha.n in Japanese(Translated: \u003chttps://packages.debian.org/changelogs/pool/non-free/l/lha/current/copyright\u003e)","archived":false,"fork":false,"pushed_at":"2025-09-07T21:51:23.000Z","size":972,"stargazers_count":83,"open_issues_count":8,"forks_count":18,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-09-07T23:31:27.424Z","etag":null,"topics":["lha","unix"],"latest_commit_sha":null,"homepage":"http://lha.osdn.jp/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jca02266.png","metadata":{"files":{"readme":"README.jp.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2015-01-20T11:49:38.000Z","updated_at":"2025-09-07T21:51:27.000Z","dependencies_parsed_at":"2024-11-26T16:30:28.152Z","dependency_job_id":"75931234-5fbb-4cd2-8662-4934af5cbdc0","html_url":"https://github.com/jca02266/lha","commit_stats":{"total_commits":967,"total_committers":9,"mean_commits":"107.44444444444444","dds":"0.13236814891416748","last_synced_commit":"26950220c9c7590fd603ecaa54a12a52371affed"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/jca02266/lha","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jca02266%2Flha","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jca02266%2Flha/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jca02266%2Flha/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jca02266%2Flha/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jca02266","download_url":"https://codeload.github.com/jca02266/lha/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jca02266%2Flha/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280207209,"owners_count":26290616,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-21T02:00:06.614Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["lha","unix"],"created_at":"2025-10-21T04:56:57.797Z","updated_at":"2025-10-21T04:56:58.889Z","avatar_url":"https://github.com/jca02266.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"LHa for UNIX with Autoconf\n=======================\n\nこのファイルは、Autoconf 版 LHa for UNIX について説明します。\n\n1. コンパイルの手順\n--------------------------------\n\nコンパイルの手順は以下のようになります。\n\n```\n  gzip -dc lha-1.14i-acXXXXXXXX.tar.gz | tar xvf -\n  cd lha-114i-acXXXXXXXX\n\n  sh ./configure\n  make\n  make check\n  make install\n```\n\nMinGW 対応はα版です。ほとんどテストされていません(make check が成功\nする程度)。Cygwin 環境で MinGW 版を試すには\n\n```\n  sh ./configure \\\n              --build=i686-pc-mingw32 \\\n              --host=x86_64-w64-mingw32 \\\n              --with-tmp-file=no\n```\n\nなどとしてください。\n\n※ Cygwin や MinGW 等、Windows 環境では深いディレクトリでコンパイル\n   するとmake check が失敗する場合があります。これは長いパスの格納\n   チェックをするときに、Windows のフルパス長の制限にひっかかるため\n   です。このような場合は、以下のように configure を浅めのディレクト\n   リで実行してください。\n\n```\n    例:\n      cd /tmp/build\n      sh ~/src/lha/configure ....\n      make\n      make check\n      make install\n```\n\nautoconf/automake がインストールされている場合で、lha ソースや \nconfigure.ac, Makefile.am をメンテナンスする場合は以下の手順になりま\nす。autoconf/automake のバージョンはそれぞれ autoconf 2.5x, automake\n1.6.x 以降での利用を前提としています。\n\n```\n  gzip -dc lha-1.14i-acXXXXXXXX.tar.gz | tar xvf -\n  cd lha-114i-acXXXXXXXX\n\n  aclocal\n  autoheader\n  automake -a\n  autoconf\n\n  # aclocal から autoconf 実行までの手順は、最近では、autoreconf -is\n  # でいけるようです。\n\n  sh ./configure\n  make\n  make check\n  make install\n```\n\n2. オリジナルからの変更点\n----------------------------------------\n\nAutoconf 版 LHa for UNIX は、\nLHa for UNIX ver1.14i \u003chttp://www2m.biglobe.ne.jp/~dolphin/lha/lha.htm\u003e\nを元に改変されました。\n\n主な変更点を下記に挙げます。\n\n### -lh6-, -lh7- メソッドのアーカイブ作成\n\nオリジナルの LHa for UNIX 1.14i では、SUPPORT_LH7 の定義をせずにコン\nパイルした場合、-lh6- および -lh7- メソッドのアーカイブを作成できま\nせんでした。このことは別に構わないのですが SUPPORT_LH7 を定義すると\nデフォルトで -lh7- メソッドのアーカイブ作成を強制されてしまいます。\nそこで、もう少し柔軟に lha 利用者がこれらを選択できるよう \nSUPPORT_LH7 は常に定義するようにし、デフォルトで作成されるアーカイブ\nのメソッド指定を configure オプションの --with-default-method=[567] \nで指定できるようにしました。\n\nこのオプションの省略値は -lh5- です。つまりデフォルトでは -lh5- アー\nカイブを作成します。(そして、上で述べた通り、lhaの o6 または o7 オプ\nションによりいつでも-lh6-、-lh7- アーカイブを作成でき、configure オ\nプションによりデフォルトの挙動を変更することができます)\n\n### アーカイブ中の漢字ファイル名\n\nオリジナルの LHa for UNIX 1.14i はアーカイブに格納するファイル名の漢\n字コードに関して無頓着です。コンパイル時に MULTIBYTE_CHAR を定義した\nときでもアーカイブ中の Shift JIS ファイル名を EUC にすることもなく、\nEUC コードのまま(正確にはシステムの漢字コードのまま)アーカイブに格納\nしたりします。\n\nautoconf 版では、configure オプション --enable-multibyte-filename に\nより漢字ファイル名が使用でき、アーカイブに格納されるファイル名の漢字\nコードを SJIS 固定として扱います。\n\n--enable-multibyte-filename の引数(システムのファイル名の漢字コード\n指定)は、以下の通りです。\n\n```\n    --enable-multibyte-filename=sjis\n          システムの漢字コードを SJIS として扱います。\n    --enable-multibyte-filename=euc\n          システムの漢字コードを EUC として扱います。\n    --enable-multibyte-filename=utf8\n          システムの漢字コードを UTF-8 として扱います。\n    --enable-multibyte-filename=auto (または yes または引数なし)\n          システムの漢字コードを自動で判別します。自動といっても現状は、\n          Cygwin, MinGW, HP-UX の場合に SJIS、iconvライブラリが利用できる場合 UTF-8、\n          それ以外を EUC とみなすだけです。\n    --enable-multibyte-filename=no\n    --disable-multibyte-filename\n          ファイル名のマルチバイトサポートを無効にします。\n```\n\nデフォルトは、auto です。\n\nlha のコマンドラインオプションにより、コンパイル時のデフォルト指定を\n変更することができます。このコマンドラインオプションは、GNU style の \nlong option (ダッシュ2つが先行するスタイル)で指定します。\n\n```\n      --system-kanji-code=xxx\n              システムのファイル名の漢字コードを指定します。\n\n      --archive-kanji-code=xxx\n              アーカイブ内へ格納するときのファイル名のコードを指定し\n              ます。これは通常 SJIS 固定なので変更するべきではありま\n              せん。\n```\n\nxxx は sjis, euc, utf8, latin1, cap のいずれかです。iconvライブラリが\n利用できる場合、任意のコードを指定することもできます。cap は、sambaなど\nで使われるコードで、漢字コードを \":\" と 16 進文字で表現するコードです。\n\n例えば、\n\n```\n      $ touch 漢字\n      $ lha c foo.lzh 漢字\n      $ lha l foo.lzh\n\n      PERMISSION  UID  GID      SIZE  RATIO     STAMP           NAME\n      ---------- ----------- ------- ------ ------------ --------------------\n      -rw-r--r--  1000/1000        0 ****** Mar 23 21:23 漢字\n      ---------- ----------- ------- ------ ------------ --------------------\n       Total         1 file        0 ****** Mar 23 21:23\n\n      $ lha l --system-kanji-code=cap foo.lzh\n\n      PERMISSION  UID  GID      SIZE  RATIO     STAMP           NAME\n      ---------- ----------- ------- ------ ------------ --------------------\n      -rw-r--r--  1000/1000        0 ****** Mar 23 21:23 :8a:bf:8e:9a\n      ---------- ----------- ------- ------ ------------ --------------------\n```\n\nなどとなります。\n\nMac OS X 用の utf8 \u003c-\u003e sjis 変換は、2002/6 に坂井浩人さんに作成して\nいただきました。ありがとうございます。\n\nまた、Mac OS X 以外でも、iconv ライブラリを使用すれば、UTF-8 を使用す\nることができます。もし、iconv を使用したくない場合は\n\n```\n   sh ./configure --enable-multibyte-filename=utf8 --disable-iconv\n```\n\nとしてください。特に Mac OS X ではこうすることで、Core Foundationライブラリ\nを使用した UTF-8 対応を行います。\n\n### 標準入力からの展開ファイルの指定\n\nオリジナルの LHa for UNIX 1.14i は、\n\n```\n  echo foo.txt | lha x foo.lzh\n  find bar -name '*.[ch]' | lha c bar.lzh\n```\n\nとすると、foo.lzh から foo.txt だけを展開したり、bar ディレクトリ配\n下のファイルを bar.lzh に格納したりできます。つまり、標準入力から、\n圧縮／展開ファイルを指定できる機能なのですが、いまいち使い道がないわ\nりに邪魔な機能です(圧縮の例は、cpio 同様まあ使えるけど、このためのオ\nプションを新設するのが良いと考えています)\n\ntty からの利用しか想定してないと思われますが、おそらく daemon から \nlha を実行する場合などで意図しない動作をするでしょう。そういうわけで\n勝手ながらこの機能は削除しました。以下のような事ができない Windows \n環境では意味のある機能だったかもしれませんが\n\n```\n  lha x bar.lzh `echo foo.txt`\n```\n\n残念ながら MinGW で isatty() がうまく動作しませんでしたから Windows \nでは使えないのでした。\n\nオリジナルの仕様を復活させたい場合は、lharc.c の 631行目付近の #if 0 \nを #if 1 にしてください。\n\n### 拡張ヘッダ(ユーザ名/グループ名)のサポート\n\nユーザ名、グループ名の拡張ヘッダ(0x52, 0x53)を作成できるようにしまし\nた(デフォルトはoff)。詳細は header.doc.jp を参照してください。展開\nと一覧表示のときにヘッダにこの情報があれば ID に優先してこの情報が利\n用されます。作成は configure オプション --enable-user-name-header を\n指定して build した場合に有効になります。\n\n### バックアップファイル作成の抑止\n\nオリジナル LHa for UNIX 1.14i では、アーカイブにファイルを追加したと\nきやアーカイブからファイルを削除したときに、元のアーカイブを .bak と\nいう拡張子で保存します。この挙動は煩わしく感じたので autoconf 版では\nバックアップファイルを作成しないようにしました。この autoconf 版パッ\nチが信用できないような人は configure オプション --enable-backup-archive\nを指定して build してください(ぜひそうするべきです:p)。オリジナルと\n同じ挙動になります。\n\n### header.c の書き換え\n\nheader.c は作り変えられました。上記に示した変更に加えてオリジナル \nLHa for UNIX 1.14i から以下の不具合が修正されました。\n\n#### level 2 header のバグ\n\ntotal header size (アーカイブヘッダの先頭 2 byte) が 256 以上\nであるアーカイブを正しく読むことができませんでした。また、total\nheader size がちょうど 256 になるような不正なアーカイブを作成し\nていました。LHA のヘッダ仕様ではヘッダ先頭が 0 であればアーカイ\nブの終端とみなすため total header size を 256 の倍数にできません。\n(256 などは little-endian で 0x00 0x01 となるため、先頭が 0 にな\nります。)\n\n読み込み時にヘッダの CRC check を行うようにしました。\n\n#### level 1 header のバグ\n\nファイル名に対して拡張ヘッダを使用することがないため、230 バイト\nを越えるファイル名(ディレクトリを含まない)をアーカイブに書くとアー\nカイブヘッダのサイズ制限を越えた不正なアーカイブが作成されていま\nした。\n\n#### level 0 header のバグ\n\n長いパス名(ディレクトリも含む)に対してアーカイブヘッダのサイズ制\n限を越えた不正なアーカイブが作成されていました(実際には、オリジ\nナルは level 0 header にディレクトリの情報を一切書かないのでこの\n制限はやはりファイル名長だけが対象になります)。autoconf 版では制\n限を越えたパス名は warning メッセージを出力し、パス名の後ろを\n切り詰めます。(level 0 header は使用するべきではありません)\n\n空の(ディレクトリ名情報のない) -lhd- ヘッダが作成されていました。\n\n```\n  $ mkdir foo\n  $ lha c0 foo.lzh foo\n  $ lha v foo.lzh\n   PERMSSN    UID  GID    PACKED    SIZE  RATIO METHOD CRC     STAMP          NAME\n  ---------- ----------- ------- ------- ------ ---------- ------------ -------------\n  drwxrwxr-x  1000/1000        0       0 ****** -lhd- 0000 Jul 29 00:18 \n  ---------- ----------- ------- ------- ------ ---------- ------------ -------------\n   Total         1 file        0       0 ******            Jul 29 00:18\n```\n\nなお、level 0 header で -lhd- method は使えないという説がある\n\n  \u003chttp://kuwa.xps.jp/x68k/KGARC/ARC/LHAHED15.ZIP\u003e\n\nのですが、吉崎栄泰氏のオリジナル LHA (DOS/Windows版) (ver 2.55,\n2.67) などは -lhd- method を level 0 header で作成します。\n\n※ この意見は認められ(\u003chttp://kuwa.xps.jp/diary/2002-10.html#27_3\u003e)、\n   上記のドキュメントは、訂正されたようです。\n\n  \u003chttp://kuwa.xps.jp/x68k/KGARC/ARC/LHAHED21.ZIP\u003e\n\n#### g オプションを付けたときの level 0, 1, 2 header\n\ng オプションは、アーカイブ作成のとき UNIX 固有の情報をアーカイブ\nに作成するのを抑止すると man にはあるのですが、実際にはディレク\nトリ情報まで抑止されていました。\n\n```\n  $ mkdir foo\n  $ touch foo/bar\n  $ lha cg1 foo.lzh foo\n  $ lha foo.lzh \n   PERMSSN    UID  GID      SIZE  RATIO     STAMP           NAME\n  ---------- ----------- ------- ------ ------------ --------------------\n  [generic]                    0 ****** Jul 29 00:02 bar\n  ---------- ----------- ------- ------ ------------ --------------------\n   Total         1 file        0 ****** Jul 29 00:02\n```\n\nautoconf 版では上記は foo/bar になります。(オリジナルはわざとそ\nうしていたのかもしれませんが、そうする理由はないと判断しました)\ng オプションで -lhd- の作成が抑止されるのは同じです。\n\nなお、g オプションとヘッダレベルの指定を同時に行うときは上記のよ\nうに g オプションを先に指定する必要があります。lha c1g など g オ\nプションを後に指定すると level 0 header が作成されます(このオリ\nジナル仕様はちょっとわかりにくいです)。\n\n### level 3 header\n\n世の中には、level 3 header というものが存在するようですが、まだ仕様\nとしてfix されてないようなので*読み込みのみ*サポートしました。追加の\n拡張ヘッダは未対応です。(特に対応すべきヘッダが見当たらなかった)\nlargefile 対応する場合は、この level 3 header をサポートした方が良さ\nそうです。\n\n### ヘッダのダンプ\n\nまったくのおまけ機能としてヘッダのダンプ機能を追加しました。これは完\n全にデバッグ用です。\n\n```\n  lha vvv foo.lzh\n```\n\nとすると、アーカイブの内容一覧にまざってダンプが出力されます。\n\n### デフォルトヘッダレベル\n\nアーカイブを作成するときのデフォルトのヘッダレベルを 2 にしました。\n(オリジナルの LHa for UNIX 1.14i ではレベル 1 がデフォルト)\n\n### 拡張ヘッダ\n\n拡張ヘッダ Windows timestamp (0x41) を解釈するようにしました。(level\n1 header のみ)。level 2 以上では、基本ヘッダに time_t の情報があるの\nで、拡張ヘッダの方は無視します。\nlevel 1 header のアーカイブに対して、Windows timestamp 拡張ヘッダ\nを出力する LHA アーカイバが存在するかどうかは未確認です。あまり、\n役に立たない修正だった気がしますがせっかく作ったので残してます:-)\n\n### -x オプション\n\n圧縮対象のファイルから除外されるパターンを指定する -x オプションを追\n加しました。これに伴い、\n\n```\n  lha c -x '*.o' -x='*.a' -x'*.c' src.lzh src\n```\n\nといった指定ができるよう、オプション解析部は変更されました。\n本バージョンの usage は以下のようになります。\n\n```\n  usage: lha [-]\u003ccommands\u003e[\u003coptions\u003e] [-\u003coptions\u003e ...] archive_file [file...]\n```\n\n### Cygwin での解凍\n\nMS-DOS タイプなど permission の情報を持たないアーカイブを Cygwin で\n解凍する場合は、0777 \u0026 ~umask で展開するようにしました。これは、.exe \nや .dll に実行属性を付けるためです。\n\n### large files 対応\n\nシステムが対応していれば、2G over な large file を扱うことができます\n(configure が適当なコンパイラオプションを指定してくれます)\n\nただし、HP-UX 11.0 で large files に対応するには以下のように\n\n```\n      CC=\"cc -Ae +DA2.0W\"\n```\n\nと指示してあげる必要があるようです。\n\n```\n      ./configure --with-tmp-file=no CC=\"cc -Ae +DA2.0W\" \\\n                              ac_cv_have_mktime=yes \\\n                              ac_cv_func_mktime=yes\n```\n\n--with-tmp-file=no は、中間ファイルを出力先と同じディレクトリに\n作成します。テンポラリディレクトリが 2G over をサポートしていない\n場合を考慮しています。\n\n(largefiles 対応とは関係ありませんが ac_cv_*=yes は、HP-UX ではなぜ\nか mktime の判定に失敗するため強制的に mktime を使うようにしています)\n\nもし large files 対応を「無効」にしたければ、\n\n```\n      ./configure --disable-largefile\n```\n\nのようにします。\n\nなお、正規の LHA では、level 0, 1, 2 ヘッダの仕様上 4G 未満のファイル\nしか書庫に格納できません(ファイルサイズを格納する領域が 4 bytes しかない)。\n\nしかし、UNLHA32.DLL などは、拡張ヘッダ(0x42)により、4G over なファイ\nルも扱えるようになっています。autoconf 版では、今のところ展開のときの\nみこの拡張ヘッダを参照して、4G overファイルをサポートします。\n\n(作成に対応していないのは、安易にUNLHA32.DLLに従うことが正しいのかよ\nくわからなかったからです。)\n\n### MacBinaryつきアーカイブのサポート\n\nMacLHAで「MacBinary」チェックボックスをONにして作成したアーカイブに\n格納されているファイルは、MacBinaryエンコードされています。\n解凍時に -b オプションを指定すると、解凍後にMacBinaryデコードを行い、\nデータフォークのみを取り出します（リソースフォークは無視されます）。\nまた、普通のアーカイブに対して b オプションを指定して解凍した場合は\n通常の解凍処理が行われます。\n\nこの機能を利用するにはapplefileライブラリが必要です。\napplefileライブラリは下記より入手できます。\n\n      http://sourceforge.net/projects/applefile/\n\n3. バグ\n-----------\n\n### 壊れたアーカイブの展開 (--extract-broken-archive)\n\nLHa for UNIX (autoconf版)は、バージョン 1.14i-ac20030713 (slide.c\nrevision 1.20) より壊れたアーカイブを作成してしまう致命的なバグがあ\nりました。(このようなアーカイブが作成される現象に遭遇することはほと\nんどないかも知れません。ただ、バグのある LHa for UNIX では正常に展開\nできてしまうので、壊れたアーカイブであることに気が付いてないだけかも\nしれません)\n\nこの壊れたアーカイブは他の正常な LHA (あるいは現在の LHa for UNIX) \nでは展開時に CRC エラーが発生してしまいます。\n\n現在のバージョンでは、\n\n```\n      lha x --extract-broken-archive broken.lzh\n```\n\nとオプション --extract-broken-archive を指定することで、このバグによ\nり作成された壊れたアーカイブを強制的に展開することができます。CRC エ\nラーが発生するアーカイブを見付けたときには(そして、それが過去の LHa\nfor UNIX (autoconf版)で作成されたものである場合には)このオプションを\n試してみてください。\n\n4. 再配布について\n---------------------------\n\n私は、src/header.c にはもはや元の lha 1.14i にあったコードは含まれて\nいないと考えています。src/header.c は私の著作物です。ただし、lha\n1.14i にあったコードが参考になったことは事実です。敬意を表する意味で\nも src/header.c にあった歴代の改変者の名前はそのまま残しています。\n\nこれの意図する所は、man/lha.man にある再配布条件を src/header.c に適\n用しないことです。私は、より自由で使いやすいコードを LHa for UNIX の\n構成物にしようと考えています。src/header.c に適用するライセンスはま\nだ未定です(なので、現状は LHa for UNIX の再配布条件が適用されると考\nえてください)。\n\n   ライセンス候補(メモ):\n         \u003chttp://www.gnu.org/licenses/license-list.ja.html\u003e\n         \u003chttp://www.opensource.org/licenses/\u003e\n\n現在のところ、src/vsnprintf.c, src/fnmatch.[ch], src/getopt_long.[ch]\nを除くその他の構成物や LHa for UNIX 全体には man/lha.man に含まれる\n条項が適用されます。(vsnprintf.c, fnmatch.c を利用するように make し\nた LHa for UNIX には、各ソースに記述された条項も適用されることに注意\nしてください)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjca02266%2Flha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjca02266%2Flha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjca02266%2Flha/lists"}