[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