]> arthur.barton.de Git - bup.git/blobdiff - lib/bup/vint.py
Fix tindex for python 3
[bup.git] / lib / bup / vint.py
index cd729ce82c27a4737d4cdf029962c19d2df65e95..cb7225d88e3ddf801c5ce727b3f60560892ae804 100644 (file)
@@ -5,38 +5,49 @@
 # This code is covered under the terms of the GNU Library General
 # Public License as described in the bup LICENSE file.
 
+# Variable length integers are encoded as vints -- see lucene.
+
 from __future__ import absolute_import
 from io import BytesIO
+import sys
+
+from bup import compat
 
-# Variable length integers are encoded as vints -- see jakarta lucene.
 
 def write_vuint(port, x):
+    write = port.write
+    bytes_from_uint = compat.bytes_from_uint
     if x < 0:
         raise Exception("vuints must not be negative")
     elif x == 0:
-        port.write('\0')
+        write(bytes_from_uint(0))
     else:
-        while x:
+        while True:
             seven_bits = x & 0x7f
             x >>= 7
             if x:
-                port.write(chr(0x80 | seven_bits))
+                write(bytes_from_uint(0x80 | seven_bits))
             else:
-                port.write(chr(seven_bits))
+                write(bytes_from_uint(seven_bits))
+                break
 
 
 def read_vuint(port):
     c = port.read(1)
-    if c == '':
-        raise EOFError('encountered EOF while reading vuint');
+    if not c:
+        raise EOFError('encountered EOF while reading vuint')
+    if ord(c) == 0:
+        return 0
     result = 0
     offset = 0
-    while c:
+    while True:
         b = ord(c)
         if b & 0x80:
             result |= ((b & 0x7f) << offset)
             offset += 7
             c = port.read(1)
+            if not c:
+                raise EOFError('encountered EOF while reading vuint')
         else:
             result |= (b << offset)
             break
@@ -46,8 +57,10 @@ def read_vuint(port):
 def write_vint(port, x):
     # Sign is handled with the second bit of the first byte.  All else
     # matches vuint.
+    write = port.write
+    bytes_from_uint = compat.bytes_from_uint
     if x == 0:
-        port.write('\0')
+        write(bytes_from_uint(0))
     else:
         if x < 0:
             x = -x
@@ -56,16 +69,16 @@ def write_vint(port, x):
             sign_and_six_bits = x & 0x3f
         x >>= 6
         if x:
-            port.write(chr(0x80 | sign_and_six_bits))
+            write(bytes_from_uint(0x80 | sign_and_six_bits))
             write_vuint(port, x)
         else:
-            port.write(chr(sign_and_six_bits))
+            write(bytes_from_uint(sign_and_six_bits))
 
 
 def read_vint(port):
     c = port.read(1)
-    if c == '':
-        raise EOFError('encountered EOF while reading vint');
+    if not c:
+        raise EOFError('encountered EOF while reading vint')
     negative = False
     result = 0
     offset = 0
@@ -82,12 +95,14 @@ def read_vint(port):
             return -result
         else:
             return result
-    while c:
+    while True:
         b = ord(c)
         if b & 0x80:
             result |= ((b & 0x7f) << offset)
             offset += 7
             c = port.read(1)
+            if not c:
+                raise EOFError('encountered EOF while reading vint')
         else:
             result |= (b << offset)
             break