summaryrefslogtreecommitdiffstats
path: root/retiolum/scripts/adv_graphgen/tinc_graphs/BackwardsReader.py
diff options
context:
space:
mode:
authormakefu <github@syntax-fehler.de>2015-09-16 08:30:04 +0200
committermakefu <github@syntax-fehler.de>2015-09-16 08:30:04 +0200
commit147044be891c92b3c0c1bcc3a4e53e2d0eef9963 (patch)
tree13ed3ac36d514347f503043b454dddaee51b03ac /retiolum/scripts/adv_graphgen/tinc_graphs/BackwardsReader.py
parent9bf9f8d045801b17956d12f599bb166e608ed6dd (diff)
parent219fab970c7fe455d3dd9bc48e909d96a234046b (diff)
Merge branch 'master' of github.com:krebscode/painload
Diffstat (limited to 'retiolum/scripts/adv_graphgen/tinc_graphs/BackwardsReader.py')
-rw-r--r--retiolum/scripts/adv_graphgen/tinc_graphs/BackwardsReader.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/retiolum/scripts/adv_graphgen/tinc_graphs/BackwardsReader.py b/retiolum/scripts/adv_graphgen/tinc_graphs/BackwardsReader.py
new file mode 100644
index 00000000..6bdbf43c
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/tinc_graphs/BackwardsReader.py
@@ -0,0 +1,35 @@
+import sys
+import os
+import string
+
+class BackwardsReader:
+ """ Stripped and stolen from : http://code.activestate.com/recipes/120686-read-a-text-file-backwards/ """
+ def readline(self):
+ while len(self.data) == 1 and ((self.blkcount * self.blksize) < self.size):
+ self.blkcount = self.blkcount + 1
+ line = self.data[0]
+ try:
+ self.f.seek(-self.blksize * self.blkcount, 2)
+ self.data = string.split(self.f.read(self.blksize) + line, '\n')
+ except IOError:
+ self.f.seek(0)
+ self.data = string.split(self.f.read(self.size - (self.blksize * (self.blkcount-1))) + line, '\n')
+
+ if len(self.data) == 0:
+ return ""
+
+ line = self.data[-1]
+ self.data = self.data[:-1]
+ return line + '\n'
+
+ def __init__(self, file, blksize=4096):
+ """initialize the internal structures"""
+ self.size = os.stat(file)[6]
+ self.blksize = blksize
+ self.blkcount = 1
+ self.f = open(file, 'rb')
+ if self.size > self.blksize:
+ self.f.seek(-self.blksize * self.blkcount, 2)
+ self.data = string.split(self.f.read(self.blksize), '\n')
+ if not self.data[-1]:
+ self.data = self.data[:-1]