Author: Amaury Forgeot d'Arc <amaur...@gmail.com>
Branch: more-rposix
Changeset: r74362:b25e33df35a3
Date: 2014-11-06 21:53 +0100
http://bitbucket.org/pypy/pypy/changeset/b25e33df35a3/

Log:    Move os.getlogin()

diff --git a/rpython/rlib/rposix.py b/rpython/rlib/rposix.py
--- a/rpython/rlib/rposix.py
+++ b/rpython/rlib/rposix.py
@@ -152,6 +152,8 @@
 c_execv = external('execv', [rffi.CCHARP, rffi.CCHARPP], rffi.INT)
 c_execve = external('execve',
                     [rffi.CCHARP, rffi.CCHARPP, rffi.CCHARPP], rffi.INT)
+c_getlogin = external('getlogin', [], rffi.CCHARP, releasegil=False)
+
 # Win32 specific functions
 c_spawnv = external('spawnv',
                     [rffi.INT, rffi.CCHARP, rffi.CCHARPP], rffi.INT)
@@ -386,6 +388,13 @@
     rffi.free_charpp(l_env)
     rffi.free_charpp(l_args)
     if childpid == -1:
-        raise OSError(rposix.get_errno(), "os_spawnve failed")
+        raise OSError(get_errno(), "os_spawnve failed")
     return intmask(childpid)
 
+@register_replacement_for(getattr(os, 'getlogin', None),
+                          sandboxed_name='ll_os.ll_os_getlogin')
+def getlogin():
+    result = c_getlogin()
+    if not result:
+        raise OSError(get_errno(), "getlogin failed")
+    return rffi.charp2str(result)
diff --git a/rpython/rtyper/module/ll_os.py b/rpython/rtyper/module/ll_os.py
--- a/rpython/rtyper/module/ll_os.py
+++ b/rpython/rtyper/module/ll_os.py
@@ -247,20 +247,6 @@
         return extdef([int], int, llimpl=c_func_llimpl,
                       export_name='ll_os.ll_os_' + name)
 
-    @registering_if(os, "getlogin", condition=not _WIN32)
-    def register_os_getlogin(self):
-        os_getlogin = self.llexternal('getlogin', [], rffi.CCHARP, 
releasegil=False)
-
-        def getlogin_llimpl():
-            result = os_getlogin()
-            if not result:
-                raise OSError(rposix.get_errno(), "getlogin failed")
-
-            return rffi.charp2str(result)
-
-        return extdef([], str, llimpl=getlogin_llimpl,
-                      export_name="ll_os.ll_os_getlogin")
-
     @registering_str_unicode(os.utime)
     def register_os_utime(self, traits):
         UTIMBUFP = lltype.Ptr(self.UTIMBUF)
diff --git a/rpython/rtyper/module/test/test_ll_os.py 
b/rpython/rtyper/module/test/test_ll_os.py
--- a/rpython/rtyper/module/test/test_ll_os.py
+++ b/rpython/rtyper/module/test/test_ll_os.py
@@ -44,7 +44,7 @@
         expected = os.getlogin()
     except OSError, e:
         py.test.skip("the underlying os.getlogin() failed: %s" % e)
-    data = getllimpl(os.getlogin)()
+    data = rposix.getlogin()
     assert data == expected
 
 def test_statvfs():
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to