aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/ruby-ole/bin/oletool
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/ruby-ole/bin/oletool')
-rwxr-xr-xvendor/ruby-ole/bin/oletool41
1 files changed, 41 insertions, 0 deletions
diff --git a/vendor/ruby-ole/bin/oletool b/vendor/ruby-ole/bin/oletool
new file mode 100755
index 000000000..d81afab5a
--- /dev/null
+++ b/vendor/ruby-ole/bin/oletool
@@ -0,0 +1,41 @@
+#! /usr/bin/ruby
+
+require 'optparse'
+require 'rubygems'
+require 'ole/storage'
+
+def oletool
+ opts = {:verbose => false, :action => :tree}
+ op = OptionParser.new do |op|
+ op.banner = "Usage: oletool [options] [files]"
+ op.separator ''
+ op.on('-t', '--tree', 'Dump ole trees for files (default)') { opts[:action] = :tree }
+ op.on('-r', '--repack', 'Repack the ole files in canonical form') { opts[:action] = :repack }
+ op.on('-m', '--mimetype', 'Print the guessed mime types') { opts[:action] = :mimetype }
+ op.on('-y', '--metadata', 'Dump the internal meta data as YAML') { opts[:action] = :metadata }
+ op.separator ''
+ op.on('-v', '--[no-]verbose', 'Run verbosely') { |v| opts[:verbose] = v }
+ op.on_tail('-h', '--help', 'Show this message') { puts op; exit }
+ end
+ files = op.parse ARGV
+ if files.empty?
+ puts 'Must specify 1 or more msg files.'
+ puts op
+ exit 1
+ end
+ Ole::Log.level = opts[:verbose] ? Logger::WARN : Logger::FATAL
+ files.each do |file|
+ case opts[:action]
+ when :tree
+ Ole::Storage.open(file) { |ole| puts ole.root.to_tree }
+ when :repack
+ Ole::Storage.open file, 'rb+', &:repack
+ when :metadata
+ Ole::Storage.open(file) { |ole| y ole.meta_data.to_h }
+ when :mimetype
+ puts Ole::Storage.open(file) { |ole| ole.meta_data.mime_type }
+ end
+ end
+end
+
+oletool