(toppers-users 4579) cfg/pass1.rbでの空行の扱い

Takeharu KATO takeharu1219 @ ybb.ne.jp
2016年 7月 20日 (水) 23:59:30 JST


加藤と申します。

初めてメールさせていただきます。

TOPPERS/ASP3のコンフィグレータでの値取得シンボルテーブルに空行があった場合、
コンフィグレータが異常終了する問題(?)を検出しましたのでご報告いたします。

つきましては、修正案を提出させていただきますので、空行を含むシンボルテーブル
ファイルを扱えるように修正をお願できませんでしょうか?

現象を確認したコンフィグレータのバージョンは, TOPPERS第3世代カーネル向け 
Ruby版コンフィギュレータ(cfg)1.2.1になります。

[現象]
コンフィグレータの値取得シンボルテーブル(arch/arm_gcc/common/core_sym.defなど)
に空行があった場合, カーネルのコンパイル時にコンフィグレータが以下の
エラーメッセージとともに異常終了します(ファイルパス中のユーザディレクトリ名
部分は削除しています)。

asp3/cfg/pass1.rb:174:in `block (2 levels) in ReadSymvalTable': undefined local variable or method `fileName' for main:Object (NameError)
        from /usr/share/ruby/csv.rb:1719:in `each'
        from cfg/pass1.rb:171:in `block in ReadSymvalTable'
        from cfg/pass1.rb:164:in `each'
        from cfg/pass1.rb:164:in `ReadSymvalTable'
        from cfg/pass1.rb:864:in `Pass1'
        from ../cfg/cfg.rb:686:in `<main>'
make[1]: *** [cfg1_out.timestamp] エラー 1

[再現手順]
カーネルコンパイル時に以下の1), 2)の手順を実施する

1) arch/arm_gcc/common/core_sym.defなどの値取得シンボルテーブル中に空行を含める
2) make clean; make を実行する

[原因]
cfg/pass1.rb 174行目の ReadSymvalTable関数内のエラー終了処理(error_exit)呼出部分から
参照する変数の名前が誤っていた。

誤: fileName
正: symvalTableFileName

[対処案]
以下の修正により, 空行や一般的なCSVコメント行(#で開始される行)を含むシンボルテーブルを
読み込んだ場合, 空行やコメント行を読み飛ばすようにする。

1) cfg/pass1.rb 174行目の ReadSymvalTable関数内のエラー終了処理から参照される変数名を
   修正

かつ

2) シンボルテーブルファイルをオープンする際に, ブランク行の読み飛ばし指示とコメント行定義を
   付与してファイルを開くよう修正する

[修正パッチ案]
上記対処案にしたがった修正案を以下に示します。

diff --git a/cfg/pass1.rb b/cfg/pass1.rb
index 141c7f5..9332b58 100644
--- a/cfg/pass1.rb
+++ b/cfg/pass1.rb
@@ -167,11 +167,11 @@ def ReadSymvalTable
       next
     end

-    symvalCsv = CSV.open(symvalTableFileName)
+    symvalCsv = CSV.open(symvalTableFileName, {skip_blanks: true, skip_lines: /^#/})
     symvalCsv.each do |record|
       # 変数名
       if record[0].nil?
-        error_exit("invalid variable name in `#{fileName}'")
+        error_exit("invalid variable name in ``#{symvalTableFileName}' at line: #{$.}")
       end

       symbol = {}
   

以上、ご検討いただきますようよろしくお願いいたします。