From 7d6fac9b98f8be8d895c5de7f184e58dac7b279a Mon Sep 17 00:00:00 2001 From: beatles Date: Sun, 14 Dec 2008 15:13:19 +0000 Subject: [PATCH] Validate a yaml file for floodagte history. If it is invalid, the default value (an empty array) is used. --- shogi-server | 12 +++++++++--- shogi_server/league/floodgate.rb | 9 ++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/shogi-server b/shogi-server index 0533040..2c7f920 100755 --- a/shogi-server +++ b/shogi-server @@ -183,14 +183,20 @@ end # Return true if the file is writable, otherwise false. # def is_writable_file?(file) + if File.exist?(file) + if FileTest.file?(file) + return FileTest.writable_real?(file) + else + return false + end + end + begin open(file, "w") {|fh| } + FileUtils.rm file rescue return false end - unless FileTest.file? file - return false - end return true end diff --git a/shogi_server/league/floodgate.rb b/shogi_server/league/floodgate.rb index 484ffd3..f780cc8 100644 --- a/shogi_server/league/floodgate.rb +++ b/shogi_server/league/floodgate.rb @@ -101,13 +101,16 @@ class League def load return unless @file.exist? - yaml = @file.open("r") {|f| f.read} - @records = YAML.load(yaml) + @records = YAML.load_file(@file) + unless @records && @records.instance_of?(Array) + $logger.error "%s is not a valid yaml file. Instead, an empty array will be used and updated." % [@file] + @records = [].to_yaml + end end def save begin - @file.open("w+") do |f| + @file.open("w") do |f| f << YAML.dump(@records) end rescue Errno::ENOSPC -- 2.11.0