[pypy-svn] r50711 - in pypy/dist/pypy: module/fcntl rpython/lltypesystem

arigo at codespeak.net arigo at codespeak.net
Thu Jan 17 17:39:01 CET 2008


Author: arigo
Date: Thu Jan 17 17:38:59 2008
New Revision: 50711

Modified:
   pypy/dist/pypy/module/fcntl/interp_fcntl.py
   pypy/dist/pypy/rpython/lltypesystem/rffi.py
Log:
Fix fcntl.  Add a helper rffi.charpsize2str().


Modified: pypy/dist/pypy/module/fcntl/interp_fcntl.py
==============================================================================
--- pypy/dist/pypy/module/fcntl/interp_fcntl.py	(original)
+++ pypy/dist/pypy/module/fcntl/interp_fcntl.py	Thu Jan 17 17:38:59 2008
@@ -122,12 +122,12 @@
         return space.wrap(rv)
     elif space.is_w(space.type(w_arg), space.w_str):
         arg = space.str_w(w_arg)
-        if len(arg) > 1024:
+        if len(arg) > 1024:   # XXX probably makes no sense for PyPy
             raise OperationError(space.w_ValueError,
                 space.wrap("fcntl string arg too long"))
         ll_arg = rffi.str2charp(arg)
         rv = fcntl_str(fd, op, ll_arg)
-        arg = rffi.charp2str(ll_arg)
+        arg = rffi.charpsize2str(ll_arg, len(arg))
         lltype.free(ll_arg, flavor='raw')
         if rv < 0:
             raise OperationError(space.w_IOError,

Modified: pypy/dist/pypy/rpython/lltypesystem/rffi.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/rffi.py	(original)
+++ pypy/dist/pypy/rpython/lltypesystem/rffi.py	Thu Jan 17 17:38:59 2008
@@ -410,6 +410,11 @@
         i += 1
     return "".join(l)
 
+# char* and size -> str (which can contain null bytes)
+def charpsize2str(cp, size):
+    l = [cp[i] for i in range(size)]
+    return "".join(l)
+
 # char**
 CCHARPP = lltype.Ptr(lltype.Array(CCHARP, hints={'nolength': True}))
 



More information about the Pypy-commit mailing list