[pypy-svn] r76953 - pypy/branch/rsocket-improvements/pypy/rlib

fijal at codespeak.net fijal at codespeak.net
Wed Sep 8 21:00:46 CEST 2010


Author: fijal
Date: Wed Sep  8 21:00:44 2010
New Revision: 76953

Modified:
   pypy/branch/rsocket-improvements/pypy/rlib/rsocket.py
Log:
Fix translation by handling conversion char* -> str by hand


Modified: pypy/branch/rsocket-improvements/pypy/rlib/rsocket.py
==============================================================================
--- pypy/branch/rsocket-improvements/pypy/rlib/rsocket.py	(original)
+++ pypy/branch/rsocket-improvements/pypy/rlib/rsocket.py	Wed Sep  8 21:00:44 2010
@@ -210,7 +210,13 @@
         rffi.setintfield(p, 'c_ifr_ifindex',
                          rffi.getintfield(a, 'c_sll_ifindex'))
         if (_c.ioctl(fd, _c.SIOCGIFNAME, p) == 0):
-            ifname = rffi.charp2str(p.c_ifr_name)
+            # eh, the iface name is a constant length array
+            i = 0
+            d = []
+            while p.c_ifr_name[i] != '\x00' and i < len(p.c_ifr_name):
+                d.append(p.c_ifr_name[i])
+                i += 1
+            ifname = ''.join(d)
         else:
             ifname = ""
         lltype.free(p, flavor='raw')
@@ -238,7 +244,10 @@
     def get_addr(self):
         a = self.lock(_c.sockaddr_ll)
         lgt = rffi.getintfield(a, 'c_sll_halen')
-        res = rffi.charpsize2str(a.c_sll_addr, lgt)
+        d = []
+        for i in range(lgt):
+            d.append(a.c_sll_addr[i])
+        res = "".join(d)
         self.unlock()
         return res
 



More information about the Pypy-commit mailing list