[pypy-svn] r46185 - pypy/branch/pypy-more-rtti-inprogress/rpython/module

fijal at codespeak.net fijal at codespeak.net
Thu Aug 30 12:15:03 CEST 2007


Author: fijal
Date: Thu Aug 30 12:15:02 2007
New Revision: 46185

Modified:
   pypy/branch/pypy-more-rtti-inprogress/rpython/module/ll_os.py
Log:
Use cool helpers


Modified: pypy/branch/pypy-more-rtti-inprogress/rpython/module/ll_os.py
==============================================================================
--- pypy/branch/pypy-more-rtti-inprogress/rpython/module/ll_os.py	(original)
+++ pypy/branch/pypy-more-rtti-inprogress/rpython/module/ll_os.py	Thu Aug 30 12:15:02 2007
@@ -15,21 +15,48 @@
 from pypy.annotation.model import SomeInteger, SomeString, SomeTuple, SomeFloat
 from pypy.annotation.model import s_ImpossibleValue, s_None, s_Bool
 from pypy.rpython.lltypesystem import rffi
-from pypy.rpython.lltypesystem.rffi import platform
 from pypy.rpython.lltypesystem import lltype
-from pypy.rpython.tool import rffi_platform
+from pypy.rpython.tool import rffi_platform as platform
 posix = __import__(os.name)
 
+class CConfig:
+    """
+    Definitions for platform integration.
+
+    Note: this must be processed through platform.configure() to provide
+    usable objects.  For example::
+
+        CLOCK_T = platform.configure(CConfig)['CLOCK_T']
+        register(function, [CLOCK_T], ...)
+
+    """
+    _includes_ = ['sys/times.h', 'utime.h', 'sys/types.h', 'unistd.h',
+                  'signal.h', 'wait.h']
+    if not sys.platform.startswith('win'):
+        _includes_ += ['dirent.h', 'sys/stat.h']
+
+    CLOCK_T = platform.SimpleType('clock_t', rffi.INT)
+
+    NAME_MAX = platform.DefinedConstantInteger('NAME_MAX')
+
+    SEEK_SET = platform.DefinedConstantInteger('SEEK_SET')
+    SEEK_CUR = platform.DefinedConstantInteger('SEEK_CUR')
+    SEEK_END = platform.DefinedConstantInteger('SEEK_END')
+
+    TMS = platform.Struct(
+        'struct tms', [('tms_utime', rffi.INT),
+                       ('tms_stime', rffi.INT),
+                       ('tms_cutime', rffi.INT),
+                       ('tms_cstime', rffi.INT)])
 
-class RegisterOs(BaseLazyRegistering):
-    UNISTD_INCL = ['unistd.h', 'sys/types.h']
 
+class RegisterOs(BaseLazyRegistering):
     def __init__(self):
-        pass
+        self.configure(CConfig)
 
     # a simple, yet usefull factory
     def extdef_for_os_function_returning_int(self, name, **kwds):
-        c_func = rffi.llexternal(name, [], rffi.INT, **kwds)
+        c_func = self.llexternal(name, [], rffi.INT, **kwds)
         def c_func_llimpl():
             res = c_func()
             if res == -1:
@@ -42,7 +69,7 @@
 
     @registering_if(os, 'execv')
     def register_os_execv(self):
-        os_execv = rffi.llexternal('execv', [rffi.CCHARP, rffi.CCHARPP],
+        os_execv = self.llexternal('execv', [rffi.CCHARP, rffi.CCHARPP],
                                    rffi.INT)
 
         def execv_llimpl(path, args):
@@ -58,7 +85,7 @@
 
     @registering_if(posix, 'spawnv')
     def register_os_spawnv(self):
-        os_spawnv = rffi.llexternal('spawnv',
+        os_spawnv = self.llexternal('spawnv',
                                     [rffi.INT, rffi.CCHARP, rffi.CCHARPP],
                                     rffi.INT)
 
@@ -78,7 +105,7 @@
 
     @registering(os.dup)
     def register_os_dup(self):
-        os_dup = rffi.llexternal('dup', [rffi.INT], rffi.INT)
+        os_dup = self.llexternal('dup', [rffi.INT], rffi.INT)
 
         def dup_llimpl(fd):
             newfd = rffi.cast(lltype.Signed, os_dup(rffi.cast(rffi.INT, fd)))
@@ -91,7 +118,7 @@
 
     @registering(os.dup2)
     def register_os_dup2(self):
-        os_dup2 = rffi.llexternal('dup2', [rffi.INT, rffi.INT], rffi.INT)
+        os_dup2 = self.llexternal('dup2', [rffi.INT, rffi.INT], rffi.INT)
 
         def dup2_llimpl(fd, newfd):
             error = rffi.cast(lltype.Signed, os_dup2(rffi.cast(rffi.INT, fd),
@@ -104,17 +131,12 @@
 
     @registering(os.utime)
     def register_os_utime(self):
-        #START
-        #print rffi.platform.has('utimes'), rffi.platform.has('utime')
-        #STOP
         TIME_T = rffi.INT    # XXX do the right thing
         UTIMEBUFP = rffi.CStructPtr('utimbuf', ('actime', TIME_T),
                                     ('modtime', TIME_T))
 
         # XXX sys/types.h is not portable at all
-        os_utime = rffi.llexternal('utime', [rffi.CCHARP, UTIMEBUFP],
-                                   rffi.INT,
-                                   includes=['utime.h', 'sys/types.h'])
+        os_utime = self.llexternal('utime', [rffi.CCHARP, UTIMEBUFP], rffi.INT)
 
         def os_utime_llimpl(path, tp):
             # XXX right now they're all ints, might change in future
@@ -167,56 +189,26 @@
 
     @registering(os.times)
     def register_os_times(self):
-        # XXX sys/times.h isn't portable
-        class CConfig:
-            """
-            Definitions for platform integration.
-
-            Note: this must be processed through rffi_platform.configure() to 
-            provide usable objects.  For example::
-
-                CLOCK_T = rffi_platform.configure(CConfig)['CLOCK_T']
-                register(function, [CLOCK_T], ...)
-
-            """
-            includes = ['sys/times.h']
-            # XXX argh, argh, argh, should be automatic
-            _header_ = "\n".join(["#include <%s>" % name for name in includes])
-
-            CLOCK_T = rffi_platform.SimpleType('clock_t', rffi.INT)
-
-            TMS = rffi_platform.Struct(
-                'struct tms', [('tms_utime', rffi.INT),
-                               ('tms_stime', rffi.INT),
-                               ('tms_cutime', rffi.INT),
-                               ('tms_cstime', rffi.INT)])
-
-        # Grab all of the platform type definitions
-        config = rffi_platform.configure(CConfig)
-        CLOCK_T = config['CLOCK_T']
-        TMS = config['TMS']
-        # Make some pointer types too
-        TMSP = lltype.Ptr(TMS)
+        self.TMSP = lltype.Ptr(self.TMS)
+        os_times = self.llexternal('times', [self.TMSP], self.CLOCK_T)
+
         # Here is a random extra platform parameter which is important.
         # Strictly speaking, this should probably be retrieved at runtime, not
         # at translation time.
-        CLOCK_TICKS_PER_SECOND = float(os.sysconf('SC_CLK_TCK'))
-
-        os_times = rffi.llexternal('times', [TMSP], CLOCK_T,
-                                   includes=['sys/times.h'])
+        self.CLOCK_TICKS_PER_SECOND = float(os.sysconf('SC_CLK_TCK'))
 
         def times_lltypeimpl():
-            l_tmsbuf = lltype.malloc(TMSP.TO, flavor='raw')
+            l_tmsbuf = lltype.malloc(self.TMSP.TO, flavor='raw')
             try:
                 result = os_times(l_tmsbuf)
                 if result == -1:
                     raise OSError(rffi.get_errno(), "times failed")
                 return (
-                    l_tmsbuf.c_tms_utime / CLOCK_TICKS_PER_SECOND,
-                    l_tmsbuf.c_tms_stime / CLOCK_TICKS_PER_SECOND,
-                    l_tmsbuf.c_tms_cutime / CLOCK_TICKS_PER_SECOND,
-                    l_tmsbuf.c_tms_cstime / CLOCK_TICKS_PER_SECOND,
-                    result / CLOCK_TICKS_PER_SECOND)
+                    l_tmsbuf.c_tms_utime / self.CLOCK_TICKS_PER_SECOND,
+                    l_tmsbuf.c_tms_stime / self.CLOCK_TICKS_PER_SECOND,
+                    l_tmsbuf.c_tms_cutime / self.CLOCK_TICKS_PER_SECOND,
+                    l_tmsbuf.c_tms_cstime / self.CLOCK_TICKS_PER_SECOND,
+                    result / self.CLOCK_TICKS_PER_SECOND)
             finally:
                 lltype.free(l_tmsbuf, flavor='raw')
         self.register(os.times, [], (float, float, float, float, float),
@@ -225,8 +217,7 @@
 
     @registering_if(os, 'setsid')
     def register_os_setsid(self):
-        os_setsid = rffi.llexternal('setsid', [], rffi.PID_T,
-                                    includes=['unistd.h'])
+        os_setsid = self.llexternal('setsid', [], rffi.PID_T)
         def setsid_llimpl():
             result = rffi.cast(lltype.Signed, os_setsid())
             if result == -1:
@@ -250,7 +241,7 @@
                       ('domainname', UTCHARP)]
             UTSNAMEP = rffi.CStructPtr('utsname', *fields)
     
-            os_uname = rffi.llexternal('uname', [UTSNAMEP], rffi.INT,
+            os_uname = self.llexternal('uname', [UTSNAMEP], rffi.INT,
                                        includes=['sys/utsname.h'])
 
             def utcharp2str(cp):
@@ -277,20 +268,17 @@
             return extdef([], (str, str, str, str, str),
                           "ll_os.ll_uname", llimpl=uname_llimpl)
 
-    @registering_if(os, 'getuid')
+    @registering(os.getuid)
     def register_os_getuid(self):
-        return self.extdef_for_os_function_returning_int('getuid',
-                                                    includes=self.UNISTD_INCL)
+        return self.extdef_for_os_function_returning_int('getuid')
 
-    @registering_if(os, 'geteuid')
+    @registering(os.geteuid)
     def register_os_geteuid(self):
-        return self.extdef_for_os_function_returning_int('geteuid',
-                                                    includes=self.UNISTD_INCL)
+        return self.extdef_for_os_function_returning_int('geteuid')
 
     @registering_if(os, 'getpid')
     def register_os_getpid(self):
-        return self.extdef_for_os_function_returning_int('getpid',
-                                                    includes=self.UNISTD_INCL)
+        return self.extdef_for_os_function_returning_int('getpid')
 
     @registering(os.open)
     def register_os_open(self):
@@ -298,7 +286,7 @@
             mode_t = rffi.INT
         else:
             mode_t = rffi.MODE_T
-        os_open = rffi.llexternal('open', [rffi.CCHARP, rffi.INT, mode_t],
+        os_open = self.llexternal('open', [rffi.CCHARP, rffi.INT, mode_t],
                                   rffi.INT)
 
         def os_open_llimpl(path, flags, mode):
@@ -321,7 +309,7 @@
 
     @registering(os.read)
     def register_os_read(self):
-        os_read = rffi.llexternal('read', [rffi.INT, rffi.VOIDP, rffi.SIZE_T],
+        os_read = self.llexternal('read', [rffi.INT, rffi.VOIDP, rffi.SIZE_T],
                                   rffi.SIZE_T)
 
         def os_read_llimpl(fd, count):
@@ -347,7 +335,7 @@
 
     @registering(os.write)
     def register_os_write(self):
-        os_write = rffi.llexternal('write', [rffi.INT, rffi.VOIDP,
+        os_write = self.llexternal('write', [rffi.INT, rffi.VOIDP,
                                    rffi.SIZE_T], rffi.SIZE_T)
 
         def os_write_llimpl(fd, data):
@@ -374,7 +362,7 @@
 
     @registering(os.close)
     def register_os_close(self):
-        os_close = rffi.llexternal('close', [rffi.INT], rffi.INT)
+        os_close = self.llexternal('close', [rffi.INT], rffi.INT)
         
         def close_llimpl(fd):
             error = rffi.cast(lltype.Signed, os_close(rffi.cast(rffi.INT, fd)))
@@ -388,14 +376,12 @@
     def register_os_lseek(self):
         if sys.platform.startswith('win'):
             funcname = '_lseeki64'
-            INCLUDES = []
         else:
             funcname = 'lseek'
-            INCLUDES = self.UNISTD_INCL
-        if platform.defined('SEEK_SET', includes=INCLUDES):
-            SEEK_SET = platform.intdefined('SEEK_SET', includes=INCLUDES)
-            SEEK_CUR = platform.intdefined('SEEK_CUR', includes=INCLUDES)
-            SEEK_END = platform.intdefined('SEEK_END', includes=INCLUDES)
+        if self.SEEK_SET is not None:
+            SEEK_SET = self.SEEK_SET
+            SEEK_CUR = self.SEEK_CUR
+            SEEK_END = self.SEEK_END
         else:
             SEEK_SET, SEEK_CUR, SEEK_END = 0, 1, 2
         if (SEEK_SET, SEEK_CUR, SEEK_END) != (0, 1, 2):
@@ -409,7 +395,7 @@
             def fix_seek_arg(n):
                 return n
 
-        os_lseek = rffi.llexternal(funcname,
+        os_lseek = self.llexternal(funcname,
                                    [rffi.INT, rffi.LONGLONG, rffi.INT],
                                    rffi.LONGLONG)
 
@@ -435,7 +421,7 @@
 
     @registering_if(os, 'ftruncate')
     def register_os_ftruncate(self):
-        os_ftruncate = rffi.llexternal('ftruncate',
+        os_ftruncate = self.llexternal('ftruncate',
                                        [rffi.INT, rffi.LONGLONG], rffi.INT)
 
         def ftruncate_llimpl(fd, length):
@@ -450,7 +436,7 @@
 
     @registering(os.access)
     def register_os_access(self):
-        os_access = rffi.llexternal('access',
+        os_access = self.llexternal('access',
                                     [rffi.CCHARP, rffi.INT],
                                     rffi.INT)
 
@@ -470,7 +456,7 @@
 
     @registering(os.getcwd)
     def register_os_getcwd(self):
-        os_getcwd = rffi.llexternal('getcwd',
+        os_getcwd = self.llexternal('getcwd',
                                     [rffi.CCHARP, rffi.SIZE_T],
                                     rffi.CCHARP)
 
@@ -506,20 +492,15 @@
         if sys.platform.startswith('win'):
             XXX   # FindFirstFile, FindNextFile
         else:
-            INCL = ['sys/types.h', 'dirent.h']
-            DIRP = rffi.COpaquePtr('DIR', includes=INCL)
-            NAME_MAX = platform.intdefined('NAME_MAX', includes=INCL)
+            DIRP = rffi.COpaquePtr('DIR')
             DIRENTP = rffi.CStructPtr('dirent',
-                ('d_name', lltype.FixedSizeArray(lltype.Char, NAME_MAX+1)),
+                ('d_name', lltype.FixedSizeArray(lltype.Char, self.NAME_MAX+1)),
                                    )
             # XXX so far, DIRENTP cannot be handled by ll2ctypes because
             #     it contains other fields before 'd_name', at least on Linux
-            os_opendir = rffi.llexternal('opendir', [rffi.CCHARP], DIRP,
-                                         includes = INCL)
-            os_readdir = rffi.llexternal('readdir', [DIRP], DIRENTP,
-                                         includes = INCL)
-            os_closedir = rffi.llexternal('closedir', [DIRP], rffi.INT,
-                                          includes = INCL)
+            os_opendir = self.llexternal('opendir', [rffi.CCHARP], DIRP)
+            os_readdir = self.llexternal('readdir', [DIRP], DIRENTP)
+            os_closedir = self.llexternal('closedir', [DIRP], rffi.INT)
 
             def os_listdir_llimpl(path):
                 path = rffi.str2charp(path)
@@ -555,8 +536,7 @@
             XXX   # CreatePipe, _open_osfhandle
         else:
             INT_ARRAY_P = lltype.Ptr(lltype.FixedSizeArray(rffi.INT, 2))
-            os_pipe = rffi.llexternal('pipe', [INT_ARRAY_P], rffi.INT,
-                                      includes=['unistd.h'])
+            os_pipe = self.llexternal('pipe', [INT_ARRAY_P], rffi.INT)
 
             def os_pipe_llimpl():
                 filedes = lltype.malloc(INT_ARRAY_P.TO, flavor='raw')
@@ -574,7 +554,7 @@
 
     @registering_if(os, 'readlink')
     def register_os_readlink(self):
-        os_readlink = rffi.llexternal('readlink',
+        os_readlink = self.llexternal('readlink',
                                    [rffi.CCHARP, rffi.CCHARP, rffi.SIZE_T],
                                    rffi.INT)  # XXX SSIZE_T in POSIX.1-2001
 
@@ -614,7 +594,7 @@
     def register_os_waitpid(self):
         if sys.platform.startswith('win'):
             # emulate waitpid() with the _cwait() of Microsoft's compiler
-            os__cwait = rffi.llexternal('_cwait',
+            os__cwait = self.llexternal('_cwait',
                                         [rffi.INTP, rffi.PID_T, rffi.INT],
                                         rffi.PID_T)
             def os_waitpid(pid, status_p, options):
@@ -625,7 +605,7 @@
                 return result
         else:
             # Posix
-            os_waitpid = rffi.llexternal('waitpid',
+            os_waitpid = self.llexternal('waitpid',
                                          [rffi.PID_T, rffi.INTP, rffi.INT],
                                          rffi.PID_T)
 
@@ -648,7 +628,7 @@
 
     @registering(os.isatty)
     def register_os_isatty(self):
-        os_isatty = rffi.llexternal('isatty', [rffi.INT], rffi.INT)
+        os_isatty = self.llexternal('isatty', [rffi.INT], rffi.INT)
 
         def isatty_llimpl(fd):
             res = os_isatty(rffi.cast(rffi.INT, fd))
@@ -659,7 +639,7 @@
 
     @registering(os.strerror)
     def register_os_strerror(self):
-        os_strerror = rffi.llexternal('strerror', [rffi.INT], rffi.CCHARP)
+        os_strerror = self.llexternal('strerror', [rffi.INT], rffi.CCHARP)
 
         def strerror_llimpl(errnum):
             res = os_strerror(rffi.cast(rffi.INT, errnum))
@@ -672,7 +652,7 @@
 
     @registering(os.system)
     def register_os_system(self):
-        os_system = rffi.llexternal('system', [rffi.CCHARP], rffi.INT)
+        os_system = self.llexternal('system', [rffi.CCHARP], rffi.INT)
 
         def system_llimpl(command):
             l_command = rffi.str2charp(command)
@@ -685,7 +665,7 @@
 
     @registering(os.unlink)
     def register_os_unlink(self):
-        os_unlink = rffi.llexternal('unlink', [rffi.CCHARP], rffi.INT)
+        os_unlink = self.llexternal('unlink', [rffi.CCHARP], rffi.INT)
 
         def unlink_llimpl(pathname):
             l_pathname = rffi.str2charp(pathname)
@@ -699,12 +679,7 @@
 
     @registering(os.chdir)
     def register_os_chdir(self):
-        if sys.platform.startswith('win'):
-            INCLUDES = []
-        else:
-            INCLUDES = ['unistd.h']
-        os_chdir = rffi.llexternal('chdir', [rffi.CCHARP], rffi.INT,
-                                   includes=INCLUDES)
+        os_chdir = self.llexternal('chdir', [rffi.CCHARP], rffi.INT)
 
         def chdir_llimpl(path):
             l_path = rffi.str2charp(path)
@@ -719,15 +694,12 @@
     @registering(os.mkdir)
     def register_os_mkdir(self):
         if os.name == 'nt':
-            INCLUDES = []
             ARG2 = []         # no 'mode' argument on Windows
             arg2 = []
         else:
-            INCLUDES = ['sys/stat.h', 'sys/types.h']
             ARG2 = [rffi.MODE_T]
             arg2 = [int]
-        os_mkdir = rffi.llexternal('mkdir', [rffi.CCHARP]+ARG2, rffi.INT,
-                                   includes=INCLUDES)
+        os_mkdir = self.llexternal('mkdir', [rffi.CCHARP]+ARG2, rffi.INT)
 
         def mkdir_llimpl(pathname, *opt_mode):
             l_pathname = rffi.str2charp(pathname)
@@ -743,12 +715,7 @@
 
     @registering(os.rmdir)
     def register_os_rmdir(self):
-        if sys.platform.startswith('win'):
-            INCLUDES = []
-        else:
-            INCLUDES = ['unistd.h']
-        os_rmdir = rffi.llexternal('rmdir', [rffi.CCHARP], rffi.INT,
-                                   includes=INCLUDES)
+        os_rmdir = self.llexternal('rmdir', [rffi.CCHARP], rffi.INT)
 
         def rmdir_llimpl(pathname):
             l_pathname = rffi.str2charp(pathname)
@@ -763,13 +730,10 @@
     @registering(os.chmod)
     def register_os_chmod(self):
         if os.name == 'nt':
-            INCLUDES = []
             MODE_T = rffi.INT
         else:
-            INCLUDES = ['sys/stat.h', 'sys/types.h']
             MODE_T = rffi.MODE_T
-        os_chmod = rffi.llexternal('chmod', [rffi.CCHARP, MODE_T], rffi.INT,
-                                   includes=INCLUDES)
+        os_chmod = self.llexternal('chmod', [rffi.CCHARP, MODE_T], rffi.INT)
 
         def chmod_llimpl(path, mode):
             l_path = rffi.str2charp(path)
@@ -783,7 +747,7 @@
 
     @registering(os.rename)
     def register_os_rename(self):
-        os_rename = rffi.llexternal('rename', [rffi.CCHARP, rffi.CCHARP],
+        os_rename = self.llexternal('rename', [rffi.CCHARP, rffi.CCHARP],
                                     rffi.INT)
 
         def rename_llimpl(oldpath, newpath):
@@ -804,7 +768,7 @@
             mode_t = rffi.INT
         else:
             mode_t = rffi.MODE_T
-        os_umask = rffi.llexternal('umask', [mode_t], mode_t)
+        os_umask = self.llexternal('umask', [mode_t], mode_t)
 
         def umask_llimpl(fd):
             res = os_umask(rffi.cast(mode_t, fd))
@@ -815,9 +779,8 @@
 
     @registering_if(os, 'kill')
     def register_os_kill(self):
-        os_kill = rffi.llexternal('kill', [rffi.PID_T, rffi.INT],
-                                  rffi.INT,
-                                  includes=['sys/types.h', 'signal.h'])
+        os_kill = self.llexternal('kill', [rffi.PID_T, rffi.INT],
+                                  rffi.INT)
 
         def kill_llimpl(pid, sig):
             res = os_kill(rffi.cast(rffi.PID_T, pid),
@@ -830,9 +793,8 @@
 
     @registering_if(os, 'link')
     def register_os_link(self):
-        os_link = rffi.llexternal('link', [rffi.CCHARP, rffi.CCHARP],
-                                  rffi.INT,
-                                  includes = ['unistd.h'])
+        os_link = self.llexternal('link', [rffi.CCHARP, rffi.CCHARP],
+                                  rffi.INT)
 
         def link_llimpl(oldpath, newpath):
             l_oldpath = rffi.str2charp(oldpath)
@@ -848,9 +810,8 @@
 
     @registering_if(os, 'symlink')
     def register_os_symlink(self):
-        os_symlink = rffi.llexternal('symlink', [rffi.CCHARP, rffi.CCHARP],
-                                     rffi.INT,
-                                     includes = ['unistd.h'])
+        os_symlink = self.llexternal('symlink', [rffi.CCHARP, rffi.CCHARP],
+                                     rffi.INT)
 
         def symlink_llimpl(oldpath, newpath):
             l_oldpath = rffi.str2charp(oldpath)
@@ -866,8 +827,7 @@
 
     @registering_if(os, 'fork')
     def register_os_fork(self):
-        os_fork = rffi.llexternal('fork', [], rffi.PID_T,
-                                  includes = ['sys/types.h', 'unistd.h'])
+        os_fork = self.llexternal('fork', [], rffi.PID_T)
 
         def fork_llimpl():
             childpid = os_fork()
@@ -880,7 +840,7 @@
 
     @registering(os._exit)
     def register_os__exit(self):
-        os__exit = rffi.llexternal('_exit', [rffi.INT], lltype.Void)
+        os__exit = self.llexternal('_exit', [rffi.INT], lltype.Void)
 
         def _exit_llimpl(status):
             os__exit(rffi.cast(rffi.INT, status))
@@ -921,9 +881,8 @@
             return int(getattr(os, name)(status))
         fake.func_name = 'fake_' + name
 
-        os_c_func = rffi.llexternal(name, [lltype.Signed],
-                                    lltype.Signed, _callable=fake,
-                                    includes=["sys/wait.h", "sys/types.h"])
+        os_c_func = self.llexternal(name, [lltype.Signed],
+                                    lltype.Signed, _callable=fake)
     
         if name in self.w_star_returning_int:
             def llimpl(status):
@@ -943,7 +902,7 @@
 
     @registering_if(os, 'ttyname')
     def register_os_ttyname(self):
-        os_ttyname = rffi.llexternal('ttyname', [lltype.Signed], rffi.CCHARP)
+        os_ttyname = self.llexternal('ttyname', [lltype.Signed], rffi.CCHARP)
 
         def ttyname_llimpl(fd):
             l_name = os_ttyname(fd)



More information about the Pypy-commit mailing list