summaryrefslogtreecommitdiff
path: root/util/protolib.py
diff options
context:
space:
mode:
authorRadhika Jagtap <radhika.jagtap@ARM.com>2014-08-10 05:39:20 -0400
committerRadhika Jagtap <radhika.jagtap@ARM.com>2014-08-10 05:39:20 -0400
commit2ee47fc8d1e3c6089e3e358603dadca913a4527c (patch)
tree06e9fa372ad2e75a38acaca6d6757404f9c2ef56 /util/protolib.py
parentdbdce42b88f9b1f954b1bbb5ae9c707a6a3c1d0c (diff)
downloadgem5-2ee47fc8d1e3c6089e3e358603dadca913a4527c.tar.xz
util: Move packet trace file read to protolib
This patch moves the code for opening an input protobuf packet trace into a function defined in the protobuf library. This is because the code is commonly used in decode scripts and is independent of the src protobuf message.
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