[pypy-svn] r44271 - pypy/branch/graphserver-dist/dotviewer

arigo at codespeak.net arigo at codespeak.net
Fri Jun 15 11:13:14 CEST 2007


Author: arigo
Date: Fri Jun 15 11:13:13 2007
New Revision: 44271

Modified:
   pypy/branch/graphserver-dist/dotviewer/msgstruct.py
Log:
Test and fix for messages with many arguments.


Modified: pypy/branch/graphserver-dist/dotviewer/msgstruct.py
==============================================================================
--- pypy/branch/graphserver-dist/dotviewer/msgstruct.py	(original)
+++ pypy/branch/graphserver-dist/dotviewer/msgstruct.py	Fri Jun 15 11:13:13 2007
@@ -20,8 +20,8 @@
 
 # ____________________________________________________________
 
-long_min = -sys.maxint-1
-long_max = sys.maxint
+long_min = -2147483648
+long_max = 2147483647
 
 
 def message(tp, *values):
@@ -37,9 +37,12 @@
         else:
             typecodes.append('q')
     typecodes = ''.join(typecodes)
-    assert len(typecodes) < 256
-    return pack(("!B%dsc" % len(typecodes)) + typecodes,
-                len(typecodes), typecodes, tp, *values)
+    if len(typecodes) < 256:
+        return pack(("!B%dsc" % len(typecodes)) + typecodes,
+                    len(typecodes), typecodes, tp, *values)
+    else:
+        # too many values - encapsulate the message in another one
+        return message('\x00', typecodes, pack("!c" + typecodes, tp, *values))
 
 def decodemessage(data):
     if data:
@@ -48,7 +51,10 @@
             typecodes = "!c" + data[1:limit]
             end = limit + calcsize(typecodes)
             if len(data) >= end:
-                return unpack(typecodes, data[limit:end]), data[end:]
+                msg = unpack(typecodes, data[limit:end])
+                if msg[0] == '\x00':
+                    msg = unpack("!c" + msg[1], msg[2])
+                return msg, data[end:]
             #elif end > 1000000:
             #    raise OverflowError
     return None, data



More information about the Pypy-commit mailing list