summaryrefslogtreecommitdiff
path: root/util/protolib.py
diff options
context:
space:
mode:
Diffstat (limited to 'util/protolib.py')
-rw-r--r--util/protolib.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/util/protolib.py b/util/protolib.py
index e085a90f2..e0507cdd4 100644
--- a/util/protolib.py
+++ b/util/protolib.py
@@ -71,8 +71,33 @@
# with protobuf python messages. For eg, the decode scripts for different
# types of proto objects can use the same function to decode a single message
+import gzip
import struct
+def openFileRd(in_file):
+ """
+ This opens the file passed as argument for reading using an appropriate
+ function depending on if it is gzipped or not. It returns the file
+ handle.
+ """
+ try:
+ # First see if this file is gzipped
+ try:
+ # Opening the file works even if it is not a gzip file
+ proto_in = gzip.open(in_file, 'rb')
+
+ # Force a check of the magic number by seeking in the
+ # file. If we do not do it here the error will occur when
+ # reading the first message.
+ proto_in.seek(1)
+ proto_in.seek(0)
+ except IOError:
+ proto_in = open(in_file, 'rb')
+ except IOError:
+ print "Failed to open ", in_file, " for reading"
+ exit(-1)
+ return proto_in
+
def DecodeVarint(in_file):
"""
The decoding of the Varint32 is copied from