Author: Matti Picus <matti.pi...@gmail.com> Branch: win32-cleanup2 Changeset: r54445:390a3cc7e556 Date: 2012-04-16 22:34 +0300 http://bitbucket.org/pypy/pypy/changeset/390a3cc7e556/
Log: rework get_osfhandle, begin review (amaury_) diff --git a/pypy/rlib/rmmap.py b/pypy/rlib/rmmap.py --- a/pypy/rlib/rmmap.py +++ b/pypy/rlib/rmmap.py @@ -740,9 +740,6 @@ # to 'anonymously' map memory. if fileno != -1 and fileno != 0: fh = rwin32.get_osfhandle(fileno) - if fh == INVALID_HANDLE: - errno = rposix.get_errno() - raise OSError(errno, os.strerror(errno)) # Win9x appears to need us seeked to zero # SEEK_SET = 0 # libc._lseek(fileno, 0, SEEK_SET) diff --git a/pypy/rlib/rposix.py b/pypy/rlib/rposix.py --- a/pypy/rlib/rposix.py +++ b/pypy/rlib/rposix.py @@ -97,17 +97,9 @@ _set_errno(rffi.cast(INT, errno)) if os.name == 'nt': - def validate_fd_emulator(fd): - try: - os.fstat(fd) - return 1 - except: - return 0 - validate_fd = rffi.llexternal( "_PyVerify_fd", [rffi.INT], rffi.INT, - _callable=validate_fd_emulator, compilation_info=eci, - _nowrapper=True, elidable_function=False, sandboxsafe=False, + compilation_info=eci, ) else: def validate_fd(fd): diff --git a/pypy/rlib/rwin32.py b/pypy/rlib/rwin32.py --- a/pypy/rlib/rwin32.py +++ b/pypy/rlib/rwin32.py @@ -128,9 +128,12 @@ _get_osfhandle = rffi.llexternal('_get_osfhandle', [rffi.INT], HANDLE) def get_osfhandle(fd): - if not validate_fd(fileno): - raise OSError(GetLastError(), 'Bad file descriptor') - return _get_osfhandle(fd) + if not validate_fd(fd): + raise WindowsError(errno.EBADF, 'Bad file descriptor') + handle = _get_osfhandle(fd) + if handle == INVALID_HANDLE_VALUE: + raise WindowsError(errno.EBADF, "Invalid file handle") + return handle def build_winerror_to_errno(): """Build a dictionary mapping windows error numbers to POSIX errno. diff --git a/pypy/rlib/streamio.py b/pypy/rlib/streamio.py --- a/pypy/rlib/streamio.py +++ b/pypy/rlib/streamio.py @@ -175,15 +175,14 @@ if sys.platform == "win32": - from pypy.rlib import rwin32 + from pypy.rlib.rwin32 import BOOL, HANDLE, get_osfhandle, GetLastError from pypy.translator.tool.cbuild import ExternalCompilationInfo from pypy.rpython.lltypesystem import rffi - import errno _eci = ExternalCompilationInfo() _setmode = rffi.llexternal('_setmode', [rffi.INT, rffi.INT], rffi.INT, compilation_info=_eci) - SetEndOfFile = rffi.llexternal('SetEndOfFile', [rffi.LONG], rwin32.BOOL, + SetEndOfFile = rffi.llexternal('SetEndOfFile', [HANDLE], BOOL, compilation_info=_eci) # HACK: These implementations are specific to MSVCRT and the C backend. @@ -198,11 +197,9 @@ # move to the position to be truncated os.lseek(fd, size, 0) # Truncate. Note that this may grow the file! - handle = rwin32.get_osfhandle(fd) - if handle == -1: - raise OSError(errno.EBADF, "Invalid file handle") + handle = get_osfhandle(fd) if not SetEndOfFile(handle): - raise WindowsError(rwin32.GetLastError(), + raise WindowsError(GetLastError(), "Could not truncate file") finally: # we restore the file pointer position in any case diff --git a/pypy/rpython/module/ll_os_stat.py b/pypy/rpython/module/ll_os_stat.py --- a/pypy/rpython/module/ll_os_stat.py +++ b/pypy/rpython/module/ll_os_stat.py @@ -403,7 +403,6 @@ def win32_fstat_llimpl(fd): handle = rwin32.get_osfhandle(fd) - filetype = win32traits.GetFileType(handle) if filetype == win32traits.FILE_TYPE_CHAR: # console or LPT device _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit