[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