Issue #25207, #14626: Fix my commit.

It doesn't work to use #define XXX defined(YYY)" and then "#ifdef XXX"
to check YYY.
This commit is contained in:
Victor Stinner 2015-09-22 01:29:33 +02:00
parent 6174474bea
commit 5ebae87628
2 changed files with 46 additions and 12 deletions

View File

@ -4605,9 +4605,9 @@ utime_fd(utime_t *ut, int fd)
#define PATH_UTIME_HAVE_FD 0
#endif
#define UTIME_HAVE_NOFOLLOW_SYMLINKS \
(defined(HAVE_UTIMENSAT) || defined(HAVE_LUTIMES))
#if defined(HAVE_UTIMENSAT) || defined(HAVE_LUTIMES)
# define UTIME_HAVE_NOFOLLOW_SYMLINKS
#endif
#ifdef UTIME_HAVE_NOFOLLOW_SYMLINKS

View File

@ -4709,8 +4709,9 @@ PyUnicode_DecodeUTF8Stateful(const char *s,
Py_ssize_t startinpos;
Py_ssize_t endinpos;
const char *errmsg = "";
PyObject *errorHandler = NULL;
PyObject *error_handler_obj = NULL;
PyObject *exc = NULL;
_Py_error_handler error_handler = _Py_ERROR_UNKNOWN;
if (size == 0) {
if (consumed)
@ -4773,24 +4774,57 @@ PyUnicode_DecodeUTF8Stateful(const char *s,
continue;
}
if (unicode_decode_call_errorhandler_writer(
errors, &errorHandler,
"utf-8", errmsg,
&starts, &end, &startinpos, &endinpos, &exc, &s,
&writer))
goto onError;
/* undecodable byte: call the error handler */
if (error_handler == _Py_ERROR_UNKNOWN)
error_handler = get_error_handler(errors);
switch (error_handler)
{
case _Py_ERROR_REPLACE:
case _Py_ERROR_SURROGATEESCAPE:
{
unsigned char ch = (unsigned char)*s;
/* Fast-path: the error handler only writes one character,
but we may switch to UCS2 at the first write */
if (_PyUnicodeWriter_PrepareKind(&writer, PyUnicode_2BYTE_KIND) < 0)
goto onError;
kind = writer.kind;
if (error_handler == _Py_ERROR_REPLACE)
PyUnicode_WRITE(kind, writer.data, writer.pos, 0xfffd);
else
PyUnicode_WRITE(kind, writer.data, writer.pos, ch + 0xdc00);
writer.pos++;
++s;
break;
}
case _Py_ERROR_IGNORE:
s++;
break;
default:
if (unicode_decode_call_errorhandler_writer(
errors, &error_handler_obj,
"utf-8", errmsg,
&starts, &end, &startinpos, &endinpos, &exc, &s,
&writer))
goto onError;
}
}
End:
if (consumed)
*consumed = s - starts;
Py_XDECREF(errorHandler);
Py_XDECREF(error_handler_obj);
Py_XDECREF(exc);
return _PyUnicodeWriter_Finish(&writer);
onError:
Py_XDECREF(errorHandler);
Py_XDECREF(error_handler_obj);
Py_XDECREF(exc);
_PyUnicodeWriter_Dealloc(&writer);
return NULL;