[pypy-commit] pypy default: Pass more systematically around the ports as an RPython int. It now
arigo
noreply at buildbot.pypy.org
Sun Oct 5 18:36:10 CEST 2014
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r73790:aa5d6556e1f1
Date: 2014-10-05 18:35 +0200
http://bitbucket.org/pypy/pypy/changeset/aa5d6556e1f1/
Log: Pass more systematically around the ports as an RPython int. It now
gets casted to USHORT only when stored into the structure fields.
diff --git a/pypy/module/_socket/interp_func.py b/pypy/module/_socket/interp_func.py
--- a/pypy/module/_socket/interp_func.py
+++ b/pypy/module/_socket/interp_func.py
@@ -1,5 +1,6 @@
from rpython.rlib import rsocket
from rpython.rlib.rsocket import SocketError, INVALID_SOCKET
+from rpython.rlib.rarithmetic import intmask
from pypy.interpreter.error import OperationError
from pypy.interpreter.gateway import unwrap_spec, WrappedDefault
@@ -172,7 +173,7 @@
Convert a 16-bit integer from network to host byte order.
"""
- return space.wrap(rsocket.ntohs(x))
+ return space.wrap(rsocket.ntohs(intmask(x)))
@unwrap_spec(x="c_uint")
def ntohl(space, x):
@@ -188,7 +189,7 @@
Convert a 16-bit integer from host to network byte order.
"""
- return space.wrap(rsocket.htons(x))
+ return space.wrap(rsocket.htons(intmask(x)))
@unwrap_spec(x="c_uint")
def htonl(space, x):
diff --git a/pypy/module/_socket/interp_socket.py b/pypy/module/_socket/interp_socket.py
--- a/pypy/module/_socket/interp_socket.py
+++ b/pypy/module/_socket/interp_socket.py
@@ -109,10 +109,11 @@
# XXX Hack to seperate rpython and pypy
def make_ushort_port(space, port):
+ assert isinstance(port, int)
if port < 0 or port > 0xffff:
raise OperationError(space.w_OverflowError, space.wrap(
"port must be 0-65535."))
- return rffi.cast(rffi.USHORT, port)
+ return port
def make_unsigned_flowinfo(space, flowinfo):
if flowinfo < 0 or flowinfo > 0xfffff:
diff --git a/rpython/rlib/rsocket.py b/rpython/rlib/rsocket.py
--- a/rpython/rlib/rsocket.py
+++ b/rpython/rlib/rsocket.py
@@ -52,6 +52,7 @@
def ntohs(x):
+ assert isinstance(x, int)
return rffi.cast(lltype.Signed, _c.ntohs(x))
def ntohl(x):
@@ -59,6 +60,7 @@
return rffi.cast(lltype.Unsigned, _c.ntohl(x))
def htons(x):
+ assert isinstance(x, int)
return rffi.cast(lltype.Signed, _c.htons(x))
def htonl(x):
@@ -221,7 +223,6 @@
def get_protocol(self):
a = self.lock(_c.sockaddr_ll)
proto = rffi.getintfield(a, 'c_sll_protocol')
- proto = rffi.cast(rffi.USHORT, proto)
res = ntohs(proto)
self.unlock()
return res
@@ -257,7 +258,6 @@
def __init__(self, host, port):
makeipaddr(host, self)
a = self.lock(_c.sockaddr_in)
- port = rffi.cast(rffi.USHORT, port)
rffi.setintfield(a, 'c_sin_port', htons(port))
self.unlock()
@@ -269,7 +269,7 @@
def get_port(self):
a = self.lock(_c.sockaddr_in)
- port = ntohs(a.c_sin_port)
+ port = ntohs(rffi.getintfield(a, 'c_sin_port'))
self.unlock()
return port
@@ -322,7 +322,7 @@
def get_port(self):
a = self.lock(_c.sockaddr_in6)
- port = ntohs(a.c_sin6_port)
+ port = ntohs(rffi.getintfield(a, 'c_sin6_port'))
self.unlock()
return port
@@ -1232,13 +1232,13 @@
servent = _c.getservbyname(name, proto)
if not servent:
raise RSocketError("service/proto not found")
- port = rffi.cast(rffi.UINT, servent.c_s_port)
+ port = rffi.getintfield(servent, 'c_s_port')
return ntohs(port)
def getservbyport(port, proto=None):
# This function is only called from pypy/module/_socket and the range of
# port is checked there
- port = rffi.cast(rffi.USHORT, port)
+ assert isinstance(port, int)
servent = _c.getservbyport(htons(port), proto)
if not servent:
raise RSocketError("port/proto not found")
More information about the pypy-commit
mailing list