aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorJack Nagel2014-10-11 01:45:41 -0500
committerJack Nagel2014-10-11 01:45:41 -0500
commite2b7c4c638cb05dbb64b9532c778455b9e97f62e (patch)
treef56012ceebf6c99a96f2dccbce346150533a1d8e /Library
parent6684269479a045c5cba2b1c544100a9193dcbbbb (diff)
downloadhomebrew-e2b7c4c638cb05dbb64b9532c778455b9e97f62e.tar.bz2
Revert "Don't raise in mach_data so the debugger doesn't catch it"
This reverts commit 4f8a3e2113c2e7b88600ff6371f9f70579c55509.
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/mach.rb85
1 files changed, 42 insertions, 43 deletions
diff --git a/Library/Homebrew/mach.rb b/Library/Homebrew/mach.rb
index de38d296b..8da667acd 100644
--- a/Library/Homebrew/mach.rb
+++ b/Library/Homebrew/mach.rb
@@ -53,52 +53,51 @@ module MachO
# /usr/include/mach-o/fat.h
def mach_data
- @mach_data ||= _mach_data
- end
-
- def _mach_data
- offsets = []
- mach_data = []
-
- header = read(8).unpack("N2")
- case header[0]
- when 0xcafebabe # universal
- header[1].times do |i|
- # header[1] is the number of struct fat_arch in the file.
- # Each struct fat_arch is 20 bytes, and the 'offset' member
- # begins 8 bytes into the struct, with an additional 8 byte
- # offset due to the struct fat_header at the beginning of
- # the file.
- offsets << read(4, 20*i + 16).unpack("N")[0]
+ @mach_data ||= begin
+ offsets = []
+ mach_data = []
+
+ header = read(8).unpack("N2")
+ case header[0]
+ when 0xcafebabe # universal
+ header[1].times do |i|
+ # header[1] is the number of struct fat_arch in the file.
+ # Each struct fat_arch is 20 bytes, and the 'offset' member
+ # begins 8 bytes into the struct, with an additional 8 byte
+ # offset due to the struct fat_header at the beginning of
+ # the file.
+ offsets << read(4, 20*i + 16).unpack("N")[0]
+ end
+ when 0xcefaedfe, 0xcffaedfe, 0xfeedface, 0xfeedfacf # Single arch
+ offsets << 0
+ when 0x7f454c46 # ELF
+ mach_data << { :arch => :x86_64, :type => :executable }
+ else
+ raise "Not a Mach-O binary."
end
- when 0xcefaedfe, 0xcffaedfe, 0xfeedface, 0xfeedfacf # Single arch
- offsets << 0
- when 0x7f454c46 # ELF
- mach_data << { :arch => :x86_64, :type => :executable }
- else
- return []
- end
- offsets.each do |offset|
- arch = case read(8, offset).unpack("N2")
- when [0xcefaedfe, 0x07000000] then :i386
- when [0xcffaedfe, 0x07000001] then :x86_64
- when [0xfeedface, 0x00000012] then :ppc7400
- when [0xfeedfacf, 0x01000012] then :ppc64
- else :dunno
- end
-
- type = case read(4, offset + 12).unpack("N")[0]
- when 0x00000002, 0x02000000 then :executable
- when 0x00000006, 0x06000000 then :dylib
- when 0x00000008, 0x08000000 then :bundle
- else :dunno
- end
-
- mach_data << { :arch => arch, :type => type }
+ offsets.each do |offset|
+ arch = case read(8, offset).unpack("N2")
+ when [0xcefaedfe, 0x07000000] then :i386
+ when [0xcffaedfe, 0x07000001] then :x86_64
+ when [0xfeedface, 0x00000012] then :ppc7400
+ when [0xfeedfacf, 0x01000012] then :ppc64
+ else :dunno
+ end
+
+ type = case read(4, offset + 12).unpack("N")[0]
+ when 0x00000002, 0x02000000 then :executable
+ when 0x00000006, 0x06000000 then :dylib
+ when 0x00000008, 0x08000000 then :bundle
+ else :dunno
+ end
+
+ mach_data << { :arch => arch, :type => type }
+ end
+ mach_data
+ rescue
+ []
end
-
- mach_data
end
def archs