diff options
Diffstat (limited to 'Library/Homebrew/vendor/macho/macho.rb')
| -rw-r--r-- | Library/Homebrew/vendor/macho/macho.rb | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/Library/Homebrew/vendor/macho/macho.rb b/Library/Homebrew/vendor/macho/macho.rb new file mode 100644 index 000000000..b7f20ea19 --- /dev/null +++ b/Library/Homebrew/vendor/macho/macho.rb @@ -0,0 +1,40 @@ +require "#{File.dirname(__FILE__)}/macho/structure" +require "#{File.dirname(__FILE__)}/macho/view" +require "#{File.dirname(__FILE__)}/macho/headers" +require "#{File.dirname(__FILE__)}/macho/load_commands" +require "#{File.dirname(__FILE__)}/macho/sections" +require "#{File.dirname(__FILE__)}/macho/macho_file" +require "#{File.dirname(__FILE__)}/macho/fat_file" +require "#{File.dirname(__FILE__)}/macho/exceptions" +require "#{File.dirname(__FILE__)}/macho/utils" +require "#{File.dirname(__FILE__)}/macho/tools" + +# The primary namespace for ruby-macho. +module MachO + # release version + VERSION = "1.1.0".freeze + + # Opens the given filename as a MachOFile or FatFile, depending on its magic. + # @param filename [String] the file being opened + # @return [MachOFile] if the file is a Mach-O + # @return [FatFile] if the file is a Fat file + # @raise [ArgumentError] if the given file does not exist + # @raise [TruncatedFileError] if the file is too small to have a valid header + # @raise [MagicError] if the file's magic is not valid Mach-O magic + def self.open(filename) + raise ArgumentError, "#{filename}: no such file" unless File.file?(filename) + raise TruncatedFileError unless File.stat(filename).size >= 4 + + magic = File.open(filename, "rb") { |f| f.read(4) }.unpack("N").first + + if Utils.fat_magic?(magic) + file = FatFile.new(filename) + elsif Utils.magic?(magic) + file = MachOFile.new(filename) + else + raise MagicError, magic + end + + file + end +end |
