aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/scripts/depfixer.py
diff options
context:
space:
mode:
authorElliott Sales de Andrade <quantum.analyst@gmail.com>2016-08-24 21:05:29 -0400
committerElliott Sales de Andrade <quantum.analyst@gmail.com>2016-08-27 18:29:56 -0400
commitfe0aa7daff3395f3036d636d9d2d1baef2feb104 (patch)
tree9c89d47b3ca4bb1663da05805b1ea23df68f000f /mesonbuild/scripts/depfixer.py
parent4c71695e41a50dda3199d26ed7aedbaaf3150768 (diff)
downloadmeson-fe0aa7daff3395f3036d636d9d2d1baef2feb104.zip
meson-fe0aa7daff3395f3036d636d9d2d1baef2feb104.tar.gz
meson-fe0aa7daff3395f3036d636d9d2d1baef2feb104.tar.bz2
Convert depfixer.Elf class into a context manager.
This allows for automatic closing of its internal file handle.
Diffstat (limited to 'mesonbuild/scripts/depfixer.py')
-rw-r--r--mesonbuild/scripts/depfixer.py34
1 files changed, 22 insertions, 12 deletions
diff --git a/mesonbuild/scripts/depfixer.py b/mesonbuild/scripts/depfixer.py
index cb136f4..7124c6f 100644
--- a/mesonbuild/scripts/depfixer.py
+++ b/mesonbuild/scripts/depfixer.py
@@ -115,11 +115,21 @@ class Elf(DataSizes):
self.bfile = bfile
self.verbose = verbose
self.bf = open(bfile, 'r+b')
- (self.ptrsize, self.is_le) = self.detect_elf_type()
- super().__init__(self.ptrsize, self.is_le)
- self.parse_header()
- self.parse_sections()
- self.parse_dynamic()
+ try:
+ (self.ptrsize, self.is_le) = self.detect_elf_type()
+ super().__init__(self.ptrsize, self.is_le)
+ self.parse_header()
+ self.parse_sections()
+ self.parse_dynamic()
+ except:
+ self.bf.close()
+ raise
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ self.bf.close()
def detect_elf_type(self):
data = self.bf.read(6)
@@ -308,13 +318,13 @@ def run(args):
print('Don\'t run this unless you know what you are doing.')
print('%s: <binary file> <prefix>' % sys.argv[0])
exit(1)
- e = Elf(args[0])
- if len(args) == 1:
- e.print_rpath()
- e.print_runpath()
- else:
- new_rpath = args[1]
- e.fix_rpath(new_rpath)
+ with Elf(args[0]) as e:
+ if len(args) == 1:
+ e.print_rpath()
+ e.print_runpath()
+ else:
+ new_rpath = args[1]
+ e.fix_rpath(new_rpath)
return 0
if __name__ == '__main__':