[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-devel:16148] Re: xdvik-ja: Cannot open gziped DVI files
- From: Kenshi Muto <kmuto@xxxxxxxx>
- Subject: [debian-devel:16148] Re: xdvik-ja: Cannot open gziped DVI files
- Date: Mon, 20 Sep 2004 13:41:52 +0900
- List-help: <mailto:debian-devel-ctl@debian.or.jp?body=help>
- List-id: debian-devel.debian.or.jp
- List-owner: <mailto:debian-devel-admin@debian.or.jp>
- List-post: <mailto:debian-devel@debian.or.jp>
- List-software: fml [fml 4.0.3 release (20011202/4.0.3)]
- List-unsubscribe: <mailto:debian-devel-ctl@debian.or.jp?body=unsubscribe>
- X-ml-info: If you have a question, send e-mail with the body "help" (without quotes) to the address debian-devel-ctl@debian.or.jp; help=<mailto:debian-devel-ctl@debian.or.jp?body=help>
- X-ml-name: debian-devel
- X-mlserver: fml [fml 4.0.3 release (20011202/4.0.3)]; post only (only members can post)
- X-original-to: debian-devel@debian.or.jp
- X-spam-level:
- X-spam-status: No, hits=0.6 required=10.0 tests=IN_REP_TO,ISO2022JP_BODY,ISO2022JP_CHARSET, QUOTED_EMAIL_TEXT,RCVD_IN_ORBS,RCVD_IN_OSIRUSOFT_COM, REFERENCES,SIGNATURE_SHORT_DENSE,SPAM_PHRASE_00_01, USER_AGENT,X_OSIRU_OPEN_RELAY version=2.44
- X-virus-scanned: by amavisd-new-20030616-p7 (Debian) at topstudio.co.jp
- References: <871xgxk8y6.fsf@xxxxxxxxxx>
- Message-id: <20040920044150.7F743222F01@xxxxxxxxxxxxxxxxxxxx>
- X-mail-count: 16148
- User-agent: Wanderlust/2.11.30 (Wonderwall) SEMI/1.14.6 (Maruoka) FLIM/1.14.6 (Marutamachi) APEL/10.6 MULE XEmacs/21.4 (patch 15) (Security Through Obscurity) (i386-debian-linux)
武藤@Debianぷろじぇくとです。
At Mon, 20 Sep 2004 10:47:49 +0900,
TSUCHIYA Masatoshi wrote:
> xdvik-ja パッケージをインストールしている状態で,圧縮された dvi ファイ
> ルが閲覧できません.
>
> % LANG=C xdvi /usr/share/doc/texmf/latex/supertab/supertabular.dvi.gz
> xdvi.bin: Fatal error: Could not open `/dev/fd/3': Bad address.
>
> xdvi.bin の alternatives を xdvi.real に戻すと,無事に閲覧できますので
> xdvi-ja.real の問題だろうと思います.
>
> で,このバグの修正方法をご存じの方は,情報提供をお願いします.
>
> なお,xdvi コマンドの代わりに xdvi-ja コマンドを利用すれば,この問題を
> 回避することができます.
xdvi-jaの場合にはテンポラリファイルという実体があるけど、xdviの場合に
は/dev/fd/*のファイルデスクリプタを直接使っているのですね。
Code Readingをしてみましたが、とっかかりだけで続きは偉い人に期待…。
1. xdvi.cのmainでfile_name2 = is_good_dvi_file(file_name, False)) を呼
び出し。これが成功したときのみ、run_dvi_file(file_name2, &info);に
よって表示が行われる。
2. xdvi.cのis_good_dvi_file(const char *filename, Boolean
from_history)。
real_filename = find_dvi_file(filename, &tried_dvi_extension,
from_history)の時点ではreal_filenameの/dev/fd/*は保持されている。
3. この中のret = REALPATH(real_filename, canonical_path); で検査してい
る。REALPATHはrealpathとdefineされているのでこれが使われる(非推奨の
関数のはずだけど…。my_realpathというのもあるけどやっぱりうまく動かな
いですね)。
4. しかし、/dev/fd/*をrealpathに通すと、realpathはENOENTを返し、
retは(null)、canonical_pathは/tmp/gxLyQcgfEZ (deleted)のような一時
ファイルとなる(すぐに存在しなくなっちゃうけど)。
5. そのあと、f = XFOPEN(ret, OPEN_MODE)) != NULLで開こうとするがretは
nullなのでエラーになり、DVI_FATAL((stderr, "Could not open `%s':
%s.", filename, strerror(errno)));が呼び出される。
file_name2 = is_good_dvi_file(file_name, False)) をせず、直接
run_dvi_file(file_name, &info);を実行すると、/dev/fd/*経由のファイルを
開くことができます。ただこれだと、相対パスから絶対パスへの置き換えをし
ないので、相対パス指定の普通のdviファイルを開こうとするとエラーになります。
--
武藤 健志@ kmuto @ kmuto.jp
Debian/JPプロジェクト (kmuto@debian.org, kmuto@debian.or.jp)
株式会社トップスタジオ (kmuto@xxxxxxxxxxxxxxx)
URI: http://www.topstudio.co.jp/~kmuto/ (Debianな話題など)