metasploit-framework/lib/metasm/misc/cheader-findpppath.rb

59 lines
967 B
Ruby

# This file is part of Metasm, the Ruby assembly manipulation suite
# Copyright (C) 2007 Yoann GUILLOT
#
# Licence is LGPL, see LICENCE in the top-level directory
#
# shows the preprocessor path to find a specific line
# usage: ruby chdr-find.rb 'regex pattern' list of files.h
#
def gets
l = $ungets
$ungets = nil
l || super
end
def parse(root=false)
want = false
ret = []
while l = gets
case l = l.strip
when /^#if/
ret << l
r = parse(true)
if r.empty?
ret.pop
else
want = true
rr = r.pop
ret.concat r.map { |l| (l[0,3] == '#el' ? ' ' : ' ') << l }
ret << rr
end
when /^#el/
if not root
$ungets = l
break
end
ret << l
r = parse
want = true if not r.empty?
ret.concat r
when /^#endif/
if not root
$ungets = l
break
end
ret << l
break
when /#$srch/ #, /^#include/
want = true
ret << l
end
end
want ? ret : []
end
$srch = ARGV.shift
puts parse