[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