[pypy-svn] r46751 - in pypy/dist/pypy/rlib: . test

arigo at codespeak.net arigo at codespeak.net
Wed Sep 19 22:31:30 CEST 2007


Author: arigo
Date: Wed Sep 19 22:31:30 2007
New Revision: 46751

Modified:
   pypy/dist/pypy/rlib/rsocket_rffi.py
   pypy/dist/pypy/rlib/test/test_rsocket_rffi.py
Log:
fixed NETLINKAddress.


Modified: pypy/dist/pypy/rlib/rsocket_rffi.py
==============================================================================
--- pypy/dist/pypy/rlib/rsocket_rffi.py	(original)
+++ pypy/dist/pypy/rlib/rsocket_rffi.py	Wed Sep 19 22:31:30 2007
@@ -334,6 +334,8 @@
 
         def __init__(self, path):
             sun = rffi.make(_c.sockaddr_un)
+            baseofs = offsetof(_c.sockaddr_un, 'c_sun_path')
+            self.setdata(sun, baseofs + len(path))
             rffi.setintfield(sun, 'c_sun_family', AF_UNIX)
             if _c.linux and path.startswith('\x00'):
                 # Linux abstract namespace extension
@@ -346,8 +348,6 @@
                 sun.c_sun_path[len(path)] = '\x00'
             for i in range(len(path)):
                 sun.c_sun_path[i] = path[i]
-            baseofs = offsetof(_c.sockaddr_un, 'c_sun_path')
-            self.setdata(sun, baseofs + len(path))
 
         def as_sockaddr_un(self):
             if self.addrlen <= offsetof(_c.sockaddr_un, 'c_sun_path'):
@@ -391,23 +391,22 @@
         maxlen = sizeof(struct)
 
         def __init__(self, pid, groups):
-            addr = _c.sockaddr_nl(nl_family = AF_NETLINK)
-            addr.nl_pid = pid
-            addr.nl_groups = groups
-            XXX; self._addr_keepalive_netlink = addr
-            self.addr = cast(pointer(addr), _c.sockaddr_ptr).contents
-            self.addrlen = sizeof(addr)
+            addr = rffi.make(_c.sockaddr_nl)
+            self.setdata(addr, NETLINKAddress.maxlen)
+            rffi.setintfield(addr, 'c_nl_family', AF_NETLINK)
+            rffi.setintfield(addr, 'c_nl_pid', pid)
+            rffi.setintfield(addr, 'c_nl_groups', groups)
 
         def as_sockaddr_nl(self):
             if self.addrlen != NETLINKAddress.maxlen:
                 raise RSocketError("invalid address")
-            return cast(pointer(self.addr), POINTER(_c.sockaddr_nl)).contents
+            return rffi.cast(lltype.Ptr(_c.sockaddr_nl), self.addr)
 
         def get_pid(self):
-            return self.as_sockaddr_nl().nl_pid
+            return self.as_sockaddr_nl().c_nl_pid
 
         def get_groups(self):
-            return self.as_sockaddr_nl().nl_groups
+            return self.as_sockaddr_nl().c_nl_groups
 
         def __repr__(self):
             return '<NETLINKAddress %r>' % (self.get_pid(), self.get_groups())

Modified: pypy/dist/pypy/rlib/test/test_rsocket_rffi.py
==============================================================================
--- pypy/dist/pypy/rlib/test/test_rsocket_rffi.py	(original)
+++ pypy/dist/pypy/rlib/test/test_rsocket_rffi.py	Wed Sep 19 22:31:30 2007
@@ -26,7 +26,6 @@
     assert a.get_path() == "/tmp/socketname"
 
 def test_netlink_addr():
-    py.test.skip("in-progress")
     if getattr(rsocket, 'AF_NETLINK', None) is None:
         py.test.skip('AF_NETLINK not supported.')
     pid = 1



More information about the Pypy-commit mailing list