[pypy-commit] cffi default: Windows: don't muck with LastError in b_get_errno()
arigo
noreply at buildbot.pypy.org
Wed Aug 22 18:56:22 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r869:af978ad0a0a8
Date: 2012-08-22 18:55 +0200
http://bitbucket.org/cffi/cffi/changeset/af978ad0a0a8/
Log: Windows: don't muck with LastError in b_get_errno() and
b_set_errno()
diff --git a/c/_cffi_backend.c b/c/_cffi_backend.c
--- a/c/_cffi_backend.c
+++ b/c/_cffi_backend.c
@@ -197,6 +197,8 @@
# else
# include "misc_thread.h"
# endif
+# define save_errno_only save_errno
+# define restore_errno_only restore_errno
#endif
#ifdef HAVE_WCHAR_H
@@ -4044,7 +4046,7 @@
static PyObject *b_get_errno(PyObject *self, PyObject *noarg)
{
int err;
- restore_errno();
+ restore_errno_only();
err = errno;
errno = 0;
return PyInt_FromLong(err);
@@ -4056,7 +4058,7 @@
if (!PyArg_ParseTuple(args, "i:set_errno", &i))
return NULL;
errno = i;
- save_errno();
+ save_errno_only();
errno = 0;
Py_INCREF(Py_None);
return Py_None;
diff --git a/c/misc_win32.h b/c/misc_win32.h
--- a/c/misc_win32.h
+++ b/c/misc_win32.h
@@ -45,6 +45,18 @@
/* else: cannot report the error */
}
+static void save_errno_only(void)
+{
+ int current_err = errno;
+ struct cffi_errno_s *p;
+
+ p = _geterrno_object();
+ if (p != NULL) {
+ p->saved_errno = current_err;
+ }
+ /* else: cannot report the error */
+}
+
static void restore_errno(void)
{
struct cffi_errno_s *p;
@@ -57,6 +69,16 @@
/* else: cannot report the error */
}
+static void restore_errno_only(void)
+{
+ struct cffi_errno_s *p;
+
+ p = _geterrno_object();
+ if (p != NULL) {
+ errno = p->saved_errno;
+ }
+ /* else: cannot report the error */
+}
/************************************************************/
/* Emulate dlopen()&co. from the Windows API */
More information about the pypy-commit
mailing list