From: "きむらこういち" Date: 2007-02-09T00:06:54+09:00 Subject: [ruby-dev:30305] ShiftJIS環境でのglobingを改善するパッチ ------=_Part_17789_23241907.1170947211526 Content-Type: text/plain; charset=ISO-2022-JP; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline 木村です。 表題のパッチを作成しました。 2007-2-7時点の stable-snapshot のソースに対する差分になっています。 大まかな変更点は以下の通りです。 dir.c emx_mblen: 追加 EMX環境のみで使用される? CompareImpl: 追加 マルチバイトのアルファベット(Aとか)を 考慮したcase independentな比較のために使用される? range: 名前変更 bracketに。中身も再実装。 fnmatch: 再実装 fnmatch_helper: 追加 fnmatchから呼び出される。 dir_inspect: 追加 dir_path: 修正 SAFEレベル4のときの汚染検査位置の移動 do_stat: 追加 システムコール statを実行し、その結果により警告を発する do_lstat: 追加 do_statの lstat版? do_opendir: 追加 opendirを実行し、その結果により警告 has_magic: 引数変更 extract_path: 削除 extract_elem: 削除 find_dirsep: 追加 グロビング対象のパターンからディレクトリセパレータを検索 remove_backslash: 修正 enum glob_pattern: 追加 struct glob_pattern: 追加 glob_free_pattern: 追加 glob_make_patternで確保した領域の解放 glob_make_pattern: 追加 グロビングのための領域確保など join_path: 追加 引数で与えられたパスとファイル名を、間にセパレータをはさんで連結 領域はこの関数内で確保する enum answer: 追加 glob_helper: 引数変更 および再実装 ruby_glob: 変更 呼び出す関数がglob_helperからruby_glob0に ruby_glob0: 追加 ruby_globi: 削除 ruby_glob_caller: 修正 glob_helperを呼び出している箇所がruby_glob0を呼び出すように push_globs: 削除 push_braces: 削除 ruby_brace_expand: 追加 struct brace_args: 追加 glob_brace: 追加 ruby_brace_glob0: 追加 ruby_brace_glob: 追加 push_glob: 追加 rb_push_glob: 修正 dir_globs: 追加 dir_s_aref: 変更 引数の種類や戻り値に変更あり? 要注意 dir_s_glob: 変更 戻り値に変更あり? 要注意 rb_define_singleton_methodで登録する dir_s_arefの引数情報に変更あり intern.h rb_file_directory_p のプロトタイプ追加 不要? ruby.h ruby_glob_funcのtypedef追加 ruby_brace_expand のプロトタイプ追加 ruby_brace_glob のプロトタイプ追加 win32/dir.h struct direct にメンバー追加 + char d_isdir; /* directory */ + char d_isrep; /* reparse point */ DIR 構造体にメンバー追加 + long loc; /* [0, nfiles) */ + char *bits; /* used for d_isdir and d_isrep */ win32/win32.c cmdglobでの ruby_globiの呼び出しを ruby_globに変更 マクロ GetBit、SetBitの追加 rb_w32_opendir: 変更 メンバー追加に伴う追加コード rb_w32_readdir: 変更 メンバー追加に伴う追加コード rb_w32_closedir: 変更 メンバー追加に伴う追加コード 必要な部分だけを持ってくるように気をつけたつもりですが、余計な 修正が入っているかもしれません。 追加された関数に関しては1.8のフォーマットに従い、ANSIスタイルの 関数宣言/定義ではなく、K&Rスタイルで行っています。 Windows xp上の VC++ 7.1で正常にビルドでき、期待した動作をする ことを確認してあります。 -- 木村浩一 I thought what I'd do was, I'd pretend I was one of those deaf-mutes or shoud I? mail kbk at kt.rim.or.jp web www.kt.rim.or.jp/~kbk/zakkicho/index.html ------=_Part_17789_23241907.1170947211526 Content-Type: application/x-gzip; name=globing-patch.diff.gz Content-Transfer-Encoding: base64 X-Attachment-Id: f_exxbmflr Content-Disposition: attachment; filename="globing-patch.diff.gz" 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 AA== ------=_Part_17789_23241907.1170947211526--