#! /usr/bin/ruby -w #================================================================ # codecheck # Check files about compliance of the coding policy #================================================================ SUFFIXES = /\.(h|cc)$/ IGNORES = /(kccommon\.h)/ BADOPEN = /[^\w](if|while|for|switch|catch)\(/ BADCLOSE = /\)\{/ BADTYPE = /[^\w](u)*(void|char|int|double|size_t|std::string)[0-9]*(_t)* +\*/ BADFUNCS = [ /[^:.>\w](malloc|calloc|realloc|free|rand|srand|abort|qsort|strtoll|llabs|div|lldiv) *\(/, /[^:.>\w](memset|memcpy|memmove|memcmp|memchr) *\(/, /[^:.>\w](strcpy|strncpy|strcat|strncat|strcmp|strchr|strrchr|strstr|strlen) *\(/, /[^:.>\w](printf|fprintf|sprintf|snprintf|vprintf|vfprintf|vsprintf|vsnprintf) *\(/, /[^:.>\w](isnan|isinf|pow|fabs|sqrt|floor|ceil|modf|modfl) *\(/, ] LIMITWIDTH = 97 def checkfile(path) printf("Checking: %s\n", path) ok = true open(path, "r") do |file| num = 0 file.each do |line| num += 1 line.chomp! if line =~ /\s$/ printf("TRAINING SPACE: %s: %d: %s\n", path, num, line) ok = false end if line =~ /\t/ printf("TAB CODE: %s: %d: %s\n", path, num, line) ok = false end if line =~ BADOPEN printf("BAD OPEN: %s: %d: %s\n", path, num, line) ok = false end if line =~ BADCLOSE printf("BAD CLOSE: %s: %d: %s\n", path, num, line) ok = false end if line =~ BADTYPE printf("BAD TYPE: %s: %d: %s\n", path, num, line) ok = false end BADFUNCS.each do |badfunc| if line =~ badfunc printf("BAD FUNC: %s: %d: %s\n", path, num, line) ok = false end end if line.length > LIMITWIDTH && !line.index("/*") && !line.index("*/") printf("BAD WIDTH: %s: %d: %s\n", path, num, line) ok = false end end end return ok end ok = true list = Array::new(ARGV) list.push(".") if list.empty? while !list.empty? path = list.shift begin if File::ftype(path) == "directory" Dir.entries(path).each do |cpath| if cpath =~ SUFFIXES && cpath !~ /[#~]/ && cpath !~ IGNORES list.push(path + "/" + cpath) end end else ok = false if !checkfile(path) end rescue end end if ok printf("ALL OK\n") exit(0) else printf("ERROR\n") exit(1) end # END OF FILE