[pypy-svn] r44398 - in pypy/dist/pypy: module/_curses rpython/lltypesystem rpython/lltypesystem/test rpython/module
arigo at codespeak.net
arigo at codespeak.net
Wed Jun 20 19:05:46 CEST 2007
Author: arigo
Date: Wed Jun 20 19:05:46 2007
New Revision: 44398
Modified:
pypy/dist/pypy/module/_curses/fficurses.py
pypy/dist/pypy/rpython/lltypesystem/rffi.py
pypy/dist/pypy/rpython/lltypesystem/test/test_rffi.py
pypy/dist/pypy/rpython/lltypesystem/typecache.py
pypy/dist/pypy/rpython/module/ll_os.py
Log:
For symmetry, add rffi.free_charp(). This is also a long-term good
idea; for example, rffi.str2charp() could in some situations return a
pointer directly into the RPython string data, if we're careful enough.
Modified: pypy/dist/pypy/module/_curses/fficurses.py
==============================================================================
--- pypy/dist/pypy/module/_curses/fficurses.py (original)
+++ pypy/dist/pypy/module/_curses/fficurses.py Wed Jun 20 19:05:46 2007
@@ -51,7 +51,7 @@
try:
curses_setupterm(ll_s, fd)
finally:
- lltype.free(ll_s, flavor='raw')
+ rffi.free_charp(ll_s)
register_external(interp_curses._curses_setupterm_null,
[int], llimpl=curses_setupterm_null_llimpl,
@@ -75,7 +75,7 @@
res = rffi.charp2str(ll_res)
return res
finally:
- lltype.free(ll_cap, flavor='raw')
+ rffi.free_charp(ll_cap)
register_external(interp_curses._curses_tigetstr, [str], str,
export_name='_curses.tigetstr', llimpl=tigetstr_llimpl)
@@ -89,7 +89,7 @@
# XXX nasty trick stolen from CPython
ll_res = c_tparm(ll_s, l[0], l[1], l[2], l[3], l[4], l[5], l[6],
l[7], l[8], l[9])
- lltype.free(ll_s, flavor='raw')
+ rffi.free_charp(ll_s)
res = rffi.charp2str(ll_res)
return res
Modified: pypy/dist/pypy/rpython/lltypesystem/rffi.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/rffi.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/rffi.py Wed Jun 20 19:05:46 2007
@@ -74,6 +74,9 @@
array[len(s)] = '\x00'
return array
+def free_charp(cp):
+ lltype.free(cp, flavor='raw')
+
# char* -> str
# doesn't free char*
def charp2str(cp):
@@ -99,9 +102,8 @@
def free_charpp(ref):
""" frees list of char**, NULL terminated
"""
- next = ref
i = 0
- while next[i]:
- lltype.free(next[i], flavor='raw')
+ while ref[i]:
+ free_charp(ref[i])
i += 1
lltype.free(ref, flavor='raw')
Modified: pypy/dist/pypy/rpython/lltypesystem/test/test_rffi.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/test/test_rffi.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/test/test_rffi.py Wed Jun 20 19:05:46 2007
@@ -46,7 +46,7 @@
def f():
s = str2charp("xxx")
res = z(s)
- lltype.free(s, flavor='raw')
+ free_charp(s)
return res
xf = compile(f, [], backendopt=False)
@@ -73,7 +73,7 @@
l_res = z(s)
res = charp2str(l_res)
lltype.free(l_res, flavor='raw')
- lltype.free(s, flavor='raw')
+ free_charp(s)
return len(res)
xf = compile(f, [], backendopt=False)
Modified: pypy/dist/pypy/rpython/lltypesystem/typecache.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/typecache.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/typecache.py Wed Jun 20 19:05:46 2007
@@ -1,5 +1,6 @@
# this is automatically generated cache files for c types
platforms = {
('', ('32bit', 'ELF'), 'Linux'):{'short': 16, 'int': 32, 'unsigned char': 8, 'long': 32, 'char': 8, 'unsigned short': 16, 'unsigned long': 32, 'long long': 64, 'mode_t': 32, 'unsigned long long': 64, 'size_t': 32, 'unsigned int': 32},
-('i386', ('32bit', ''), 'Darwin'):{'short': 16, 'int': 32, 'unsigned char': 8, 'long': 32, 'char': 8, 'unsigned short': 16, 'unsigned long': 32, 'long long': 64, 'mode_t': 16, 'unsigned long long': 64, 'size_t': 32, 'unsigned int': 32}
+('i386', ('32bit', ''), 'Darwin'):{'short': 16, 'int': 32, 'unsigned char': 8, 'long': 32, 'char': 8, 'unsigned short': 16, 'unsigned long': 32, 'long long': 64, 'mode_t': 16, 'unsigned long long': 64, 'size_t': 32, 'unsigned int': 32},
+('Intel(R) Pentium(R) M processor 1.73GHz', ('32bit', ''), 'Linux'):{'short': 16, 'int': 32, 'unsigned char': 8, 'long': 32, 'char': 8, 'unsigned short': 16, 'unsigned long': 32, 'long long': 64, 'mode_t': 32, 'unsigned long long': 64, 'size_t': 32, 'unsigned int': 32}
}
Modified: pypy/dist/pypy/rpython/module/ll_os.py
==============================================================================
--- pypy/dist/pypy/rpython/module/ll_os.py (original)
+++ pypy/dist/pypy/rpython/module/ll_os.py Wed Jun 20 19:05:46 2007
@@ -46,7 +46,7 @@
l_args = rffi.liststr2charpp(args)
os_execv(l_path, l_args)
rffi.free_charpp(l_args)
- lltype.free(l_path, flavor='raw')
+ rffi.free_charp(l_path)
raise OSError(rffi.c_errno, "execv failed")
register_external(os.execv, [str, [str]], s_ImpossibleValue, llimpl=
@@ -92,7 +92,7 @@
def utime_null_lltypeimpl(path):
l_path = rffi.str2charp(path)
error = ros_utime(l_path, lltype.nullptr(UTIMEBUFP.TO))
- lltype.free(l_path, flavor='raw')
+ rffi.free_charp(l_path)
if error == -1:
raise OSError(rffi.c_errno, "utime_null failed")
register_external(ros.utime_null, [str], s_None, "ll_os.utime_null",
@@ -106,7 +106,7 @@
actime, modtime = tp
l_utimebuf.c_actime, l_utimebuf.c_modtime = int(actime), int(modtime)
error = ros_utime(l_path, l_utimebuf)
- lltype.free(l_path, flavor='raw')
+ rffi.free_charp(l_path)
lltype.free(l_utimebuf, flavor='raw')
if error == -1:
raise OSError(rffi.c_errno, "utime_tuple failed")
@@ -129,7 +129,7 @@
l_path = rffi.str2charp(path)
mode = lltype.cast_primitive(mode_t, mode)
result = os_open(l_path, flags, mode)
- lltype.free(l_path, flavor='raw')
+ rffi.free_charp(l_path)
if result == -1:
raise OSError(rffi.c_errno, "os_open failed")
return result
More information about the Pypy-commit
mailing list