Cygwin なんでも掲示板

一覧最新記事過去一覧 | 検索FAQアンテナHOME
(新規投稿・発言はできません)

No.1306  Re[7]:locateでWindows上の全領域を検索したい
発言者: knabe
発言日: 2003 07/02 10:36
 
久々に素のcygwin1.dllに戻して、straceかけてみて納得。
# for n in 0 1 2 3; do strace -o ~/find.$n.trace find t$n -print; done

原因はnormalize_posix_path()でコードページを無視して
無条件に0x5c(\)を0x2f(/)に変換しているためです。
このためにSJIS第二バイトに0x5cを含む文字('ソ'など)が
破壊され、"ABCソフト"が"ABC(0x83)/フト"となってしまい、
エラーが発生します。
# エラーメッセージが変な原因は忘れました。

なお、t3では、opendir()でディレクトリの中身を検索す
るために渡されたパスに'\*'を付加してFindFirstFileA()を
呼んでいるところで、パス名の末尾の文字が0x5cだった場合
には、'*'しかつけていないことも影響します。

問題はcygwin1.dllの内部でFindFirstFileA()のようにANSI
コードページをパス名として受け取るWin32APIを使っている
のに、ANSIコードページを無視して文字列処理を行っている
あたりにあるような気がします。
# FindFirstFileW()のようなワイドキャラクタ(Windowsの実装
# では実体はUnicode)を受け取るAPIを使うか、藤枝さんのi18n
# 拡張のようにISO Cのワイドキャラクタ関連を実装するしか
# ないと思いますが、どちらにしても範囲が大きい...

このあたりの問題は、文書としてまとまったものはないと
思います。
# 皆さん問題を避けて使っているみたいで。


▼関連発言

1288:locateでWindows上の全領域を検索したい [あき] 06/28
 └1290:Re:locateでWindows上の全領域を検索したい [MSだす。] 06/29
  └1292:Re[2]:locateでWindows上の全領域を検索したい [nil] 06/30
   ├1297:Re[3]:locateでWindows上の全領域を検索したい [knabe] 07/01
   │└1298:Re[4]:locateでWindows上の全領域を検索したい [MSだす。] 07/01
   │ └1299:Re[5]:locateでWindows上の全領域を検索したい [knabe] 07/01
   │  ├1300:Re[6]:locateでWindows上の全領域を検索したい [あき] 07/01
   │  │├1302:Re[7]:locateでWindows上の全領域を検索したい [あき] 07/01
   │  │└1304:Re[7]:locateでWindows上の全領域を検索したい [nil] 07/02
   │  │ └1305:Re[8]:locateでWindows上の全領域を検索したい [nil] 07/02
   │  └1303:Re[6]:locateでWindows上の全領域を検索したい [nil] 07/02
   │   └1306:Re[7]:locateでWindows上の全領域を検索したい [knabe] 07/02
   │    └1312:Re[8]:locateでWindows上の全領域を検索したい [nil] 07/02
   └1327:Re[3]:locateでWindows上の全領域を検索したい [nil] 07/06
    └1330:Re[4]:locateでWindows上の全領域を検索したい [nil] 07/08
     ├1332:Re[5]:locateでWindows上の全領域を検索したい [nil] 07/09
     └1341:Re[5]:locateでWindows上の全領域を検索したい [あき] 07/13 <

Pass 保存

早田のホームページへ
CGIROOM