Author: Armin Rigo <[email protected]>
Branch: errno-again
Changeset: r75328:24f8ef4e0443
Date: 2015-01-14 18:26 +0100
http://bitbucket.org/pypy/pypy/changeset/24f8ef4e0443/
Log: in-progress
diff --git a/rpython/memory/gc/inspector.py b/rpython/memory/gc/inspector.py
--- a/rpython/memory/gc/inspector.py
+++ b/rpython/memory/gc/inspector.py
@@ -130,7 +130,8 @@
rffi.cast(llmemory.Address, self.writebuffer),
rffi.cast(rffi.SIZE_T, bytes))
if rffi.cast(lltype.Signed, count) != bytes:
- raise OSError(rposix.get_errno(), "raw_os_write failed")
+ raise OSError(rffi.cast(lltype.Signed, rposix._get_errno()),
+ "raw_os_write failed")
self.buf_count = 0
flush._dont_inline_ = True
diff --git a/rpython/rtyper/lltypesystem/test/test_ll2ctypes.py
b/rpython/rtyper/lltypesystem/test/test_ll2ctypes.py
--- a/rpython/rtyper/lltypesystem/test/test_ll2ctypes.py
+++ b/rpython/rtyper/lltypesystem/test/test_ll2ctypes.py
@@ -756,21 +756,23 @@
old_err_mode = ctypes.windll.kernel32.GetErrorMode()
new_err_mode = old_err_mode | SEM_NOGPFAULTERRORBOX
ctypes.windll.kernel32.SetErrorMode(new_err_mode)
- strlen = rffi.llexternal('strlen', [rffi.CCHARP], rffi.SIZE_T,
- compilation_info=eci)
+ os_write_no_errno = rffi.llexternal(UNDERSCORE_ON_WIN32 + 'write',
+ [rffi.INT, rffi.CCHARP, rffi.SIZE_T],
+ rffi.SIZE_T, save_err=rffi.RFFI_ERR_NONE)
os_write = rffi.llexternal(UNDERSCORE_ON_WIN32 + 'write',
[rffi.INT, rffi.CCHARP, rffi.SIZE_T],
- rffi.SIZE_T)
+ rffi.SIZE_T, save_err=rffi.RFFI_SAVE_ERRNO)
buffer = lltype.malloc(rffi.CCHARP.TO, 5, flavor='raw')
written = os_write(12312312, buffer, 5)
if sys.platform.startswith('win'):
ctypes.windll.kernel32.SetErrorMode(old_err_mode)
+ assert rffi.cast(rffi.LONG, written) < 0
+ # the next line is a different external function call
+ # without RFFI_SAVE_ERRNO, to check that it doesn't reset errno
+ buffer[0] = '\n'
+ os_write_no_errno(2, buffer, 1)
lltype.free(buffer, flavor='raw')
- assert rffi.cast(rffi.LONG, written) < 0
- # the next line is a random external function call,
- # to check that it doesn't reset errno
- strlen("hi!")
- err = rposix.get_errno()
+ err = rposix.get_saved_errno()
import errno
assert err == errno.EBADF
assert not ALLOCATED # detects memory leaks in the test
diff --git a/rpython/rtyper/lltypesystem/test/test_rffi.py
b/rpython/rtyper/lltypesystem/test/test_rffi.py
--- a/rpython/rtyper/lltypesystem/test/test_rffi.py
+++ b/rpython/rtyper/lltypesystem/test/test_rffi.py
@@ -3,7 +3,7 @@
import sys
from rpython.rtyper.lltypesystem.rffi import *
from rpython.rtyper.lltypesystem.rffi import _keeper_for_type # crap
-from rpython.rlib.rposix import get_errno, set_errno
+from rpython.rlib.rposix import get_saved_errno, set_saved_errno
from rpython.translator.c.test.test_genc import compile as compile_c
from rpython.rtyper.lltypesystem.lltype import Signed, Ptr, Char, malloc
from rpython.rtyper.lltypesystem import lltype
@@ -207,15 +207,15 @@
bad_fd = 12312312
def f():
- set_errno(12)
- return get_errno()
+ set_saved_errno(12)
+ return get_saved_errno()
def g():
try:
os.write(bad_fd, "xxx")
except OSError:
pass
- return get_errno()
+ return get_saved_errno()
fn = self.compile(f, [])
assert fn() == 12
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit