◀ANSI版開発トップへ
  • 2831 Grepとその他バグ修正
    • 2839 RE: Grep - 内容とは関係ないのですが
      • 2851 Re2: Grep - 内容とは関係ないのですが
        • 2854 取り込み作業中ですが,ちょっと質問など
          • 2862 Re: 取り込み作業中ですが,ちょっと質問など
    • 2841 RE: Grepとその他バグ修正
  • [2831] Grepとその他バグ修正 もか 2003年06月10日 11:03

    正規表現の置換に関するバグ修正に関して、かろとさん、すいさん、蒔田 信幸さん、(他にもいたらごめんなさい)
    本当にご苦労様です。
    正規表現ということでGrepの正規表現は大丈夫なのか心配になり見てみたら、気になる部分があったので修正してみました。
    ついでに、他のバグ修正も含んでいます。

    eGroupsの、030525fix.zip

    [バグ修正]
    ・Grepのバグ修正(仕様変更)
    詳細は一般掲示板の「Grep出力結果のバグっぽい仕様の変更(案)」を見てください
    ・BCC版で0バイトのファイルが開けない問題の修正
    ・CShareData::GetMacroName()の戻り値がローカル変数へのポインタを返すことがあった
    ・CPPAのメモリーリークの修正とメモリー使用量削減
    [その他]
    ・検索の高速化(数clock)
    ・VCのリンクエラー対策
    ・CFileLoad内部で文字コード判別ができるように変更

    ところで、直していませんけど開発#2931の「GrepにドロップするとGrepのままファイルを開く」はバグですよね?
    • [2839] RE: Grep - 内容とは関係ないのですが すい 2003年06月12日 02:13

      Grep 周りいじるならついでに出来れば、と。

      Grep ダイアログの「ファイル(T)」欄ですが、ここが空欄で Grep検索しようとすると
      「検索対象ファイルを指定してください。」なんて警告ダイアログ出ちゃいますけど。
      ここが空欄の状態で検索したら「*.*」が指定されているとみなして全ファイル検索
      してくれた方が嬉しいと思うのですが。いちいち *.* って入力するの面倒ですし。
      Windows 標準のファイル検索やなんかが↑そうなっていますよね。

      sakura_core/CDlgGrep.cpp 500行近辺?
      int CDlgGrep::GetData( void ) 内


      >ところで、直していませんけど開発#2931の「GrepにドロップするとGrepのままファイルを開く」はバグですよね?

      これはバグでしょうねぇ、いくらなんでもこれは。(;^^;)
      • [2851] Re2: Grep - 内容とは関係ないのですが もか 2003年06月14日 13:28

        ▼すいさん
        >Grep ダイアログの「ファイル(T)」欄が
        >(中略)
        >空欄の状態で検索したら「*.*」が指定されているとみなして全ファイル検索
        という風にしました。
        コマンドラインオプションと、マクロは以前のままです。

        eGroupsの、030525fix2.zipです。
        ssrc_2003-05-25からの差分で、030525fix.zipの変更内容と#2841のCFileLoadに関する部分を含んでいます。
        030525fix.zip適用後、BOMを読み飛ばし損ねるバグを修正。


        [バグ修正]
        ・開発#2931 Grepウィンドウがそのままファイルを開くことがある
        [仕様変更]
        ・Grep ダイアログの「ファイル」欄が空欄の状態で検索したら「*.*」が指定されているとみなして全ファイル検索

        余談:
        どうもこのワイルドカード指定というものは曲者ですね。
        「*.*」=「*」というのがWindows/Linux世代(私だけかも)には謎な仕様に思える
        .を含むファイル名のファイルから検索したいときはどうすればいいんだろう
        • [2854] 取り込み作業中ですが,ちょっと質問など げんた 2003年06月15日 03:06

          >eGroupsの、030525fix2.zipです。
          *CShareData::GetMacroName()
          外からバッファを与えるならバッファサイズも併せて与えた方が良いと思い,その辺の防御機構を追加しました.

          *PPAのメモリリーク
          どの辺がメモリリークなのでしょうか.登録が2回以上呼ばれるとリークするということでしょうか.一応解放時にはdeleteしているようですが.
          確かにCSMacroMgrの要素に文字列を入れるのは気持ち悪いですけど,ひょっとして登録した文字列をPPA.DLLが解放されるまで保持し続けないと正しく動かないからこうなっているのかなと思ってPPA.DLLの説明を確認しました.特にそういう制限は書いてないようなので大丈夫なのかな?

          ただどうせやるなら,メモリの取得解放を繰り返さなくても呼び出し側で大きなバッファを用意してそこに入れてもらった方が効率的かとおもいます.一応取り込む前に動作確認してみます.

          *ヒットした文字列の表示文字数制限の変更
          これ,変更した意図がよくわからないのですが.ソース上でも単に最大値を設定しているだけですし.
          • [2862] Re: 取り込み作業中ですが,ちょっと質問など もか 2003年06月16日 20:10

            ▼ げんたさん
            >>eGroupsの、030525fix2.zipです。
            >*CShareData::GetMacroName()
            >外からバッファを与えるならバッファサイズも併せて与えた方が良いと思い,その辺の防御機構を追加しました.
            了解しました。

            *PPAのメモリリーク
            >どの辺がメモリリークなのでしょうか.
            ・InitDll()内
             CSMacroMgr::m_MacroFuncInfoNotCommandAr
            r[i].m_pszData = new char [ strlen(CSMacroMgr::m_MacroFuncInfoNotCom
            mandArr[i].m_pszFuncName) + 256 ];
             GetDeclarations( CSMacroMgr::m_MacroFuncInfoNotCommandArr
            [i] );
            ・GetDeclarations( MacroFuncInfo& cMacroFuncInfo )内
             cMacroFuncInfo.m_pszData = new char [ lstrlen( szBuffer ) + 1 ];
            このあたりです。同じポインタ変数に2回連続してnewの結果?を入れています。
            >登録した文字列をPPA.DLLが解放されるまで保持し続けないと正しく動かないからこうなっているのかなと思って(中略...)特にそういう制限は書いてないようなので大丈夫なのかな?
            私もそう思ったのですが、保持しなくても動くようです。
            (このCPPA.cppの変更はマクロ拡張にも含まれています。)
            ちなみにstaticなのは、「マクロ拡張」のエラー表示で流用したかったからですが、
            引数の型チェックはPPA.dllがさきにエラーを返してくるため、
            定義関数内のエラー処理で引数の型情報まで表示する必要はなかったかもしれません。
            >ただどうせやるなら,メモリの取得解放を繰り返さなくても呼び出し側で大きなバッファを用意してそこに入れてもらった方が効率的かとおもいます.一応取り込む前に動作確認してみます.
            たしかに。適当に書き換えちゃってください。m(__)m

            *ヒットした文字列の表示文字数制限の変更
            >これ,変更した意図がよくわからないのですが.ソース上でも単に最大値を設定しているだけですし.
            とくに意味はありませんが、
            ・Grep結果に表示された文字列を何かに流量している人がいたら途中で切れるのはよくない
            ・逆に制限をなくして正直に1行全部表示してメモリーを使い果たすのも問題
            と思い、とりあえず現状で確保しているサイズの安全な範囲の最大値に近い、きりのいい数字にしてみました。
    • [2841] RE: Grepとその他バグ修正 もか 2003年06月12日 10:51

      >eGroupsの、030525fix.zip
      パッチのバグ修正。(現時点での動作には問題のないバグです)
      このパッチを当てた後の行番号で
      CFileLoad.cpp (150):
      - if( nBomCode != 0 || nBomCode == m_CharCode ){
      + if( nBomCode != 0 && nBomCode == m_CharCode ){

      Grepの正規表現ON/該当部分にて長さ0にヒットすると、
      次の検索開始位置が、漢字の真ん中から始まります。
      (オリジナル・030525fix.zip当てた後の両方とものバグ)
      例:
      「B|(.*?)」//特に意味のない検索
      データ「B。BB」
      だとBが4つみつかります。