(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 = {}
以上、ご検討いただきますようよろしくお願いいたします。