Use PyString_FromFormat for formatting error messages.

This commit is contained in:
Martin v. Löwis 2006-02-16 07:11:33 +00:00
parent e0e89f7920
commit 720ddb625b
1 changed files with 36 additions and 42 deletions

View File

@ -1238,7 +1238,6 @@ UnicodeEncodeError__str__(PyObject *self, PyObject *arg)
Py_ssize_t start;
Py_ssize_t end;
PyObject *reasonObj = NULL;
char buffer[1000];
PyObject *result = NULL;
self = arg;
@ -1260,32 +1259,30 @@ UnicodeEncodeError__str__(PyObject *self, PyObject *arg)
if (end==start+1) {
int badchar = (int)PyUnicode_AS_UNICODE(objectObj)[start];
char *format;
char badchar_str[20];
if (badchar <= 0xff)
format = "'%.400s' codec can't encode character u'\\x%02x' in position %d: %.400s";
PyOS_snprintf(badchar_str, sizeof(badchar_str), "x%02x", badchar);
else if (badchar <= 0xffff)
format = "'%.400s' codec can't encode character u'\\u%04x' in position %d: %.400s";
PyOS_snprintf(badchar_str, sizeof(badchar_str), "u%04x", badchar);
else
format = "'%.400s' codec can't encode character u'\\U%08x' in position %d: %.400s";
PyOS_snprintf(buffer, sizeof(buffer),
format,
PyOS_snprintf(badchar_str, sizeof(badchar_str), "U%08x", badchar);
result = PyString_FromFormat(
"'%.400s' codec can't encode character u'\\%s' in position %zd: %.400s",
PyString_AS_STRING(encodingObj),
badchar,
badchar_str,
start,
PyString_AS_STRING(reasonObj)
);
}
else {
/* XXX %zd? */
PyOS_snprintf(buffer, sizeof(buffer),
"'%.400s' codec can't encode characters in position %d-%d: %.400s",
result = PyString_FromFormat(
"'%.400s' codec can't encode characters in position %zd-%zd: %.400s",
PyString_AS_STRING(encodingObj),
(int)start,
(int)(end-1),
start,
(end-1),
PyString_AS_STRING(reasonObj)
);
}
result = PyString_FromString(buffer);
error:
Py_XDECREF(reasonObj);
@ -1324,7 +1321,6 @@ UnicodeDecodeError__str__(PyObject *self, PyObject *arg)
Py_ssize_t start;
Py_ssize_t end;
PyObject *reasonObj = NULL;
char buffer[1000];
PyObject *result = NULL;
self = arg;
@ -1345,26 +1341,28 @@ UnicodeDecodeError__str__(PyObject *self, PyObject *arg)
goto error;
if (end==start+1) {
/* XXX %zd? */
PyOS_snprintf(buffer, sizeof(buffer),
"'%.400s' codec can't decode byte 0x%02x in position %d: %.400s",
/* FromFormat does not support %02x, so format that separately */
char byte[4];
PyOS_snprintf(byte, sizeof(byte), "%02x",
((int)PyString_AS_STRING(objectObj)[start])&0xff);
result = PyString_FromFormat(
"'%.400s' codec can't decode byte 0x%s in position %zd: %.400s",
PyString_AS_STRING(encodingObj),
((int)PyString_AS_STRING(objectObj)[start])&0xff,
(int)start,
byte,
start,
PyString_AS_STRING(reasonObj)
);
}
else {
/* XXX %zd? */
PyOS_snprintf(buffer, sizeof(buffer),
"'%.400s' codec can't decode bytes in position %d-%d: %.400s",
result = PyString_FromFormat(
"'%.400s' codec can't decode bytes in position %zd-%zd: %.400s",
PyString_AS_STRING(encodingObj),
(int)start,
(int)(end-1),
start,
(end-1),
PyString_AS_STRING(reasonObj)
);
}
result = PyString_FromString(buffer);
error:
Py_XDECREF(reasonObj);
@ -1442,7 +1440,6 @@ UnicodeTranslateError__str__(PyObject *self, PyObject *arg)
Py_ssize_t start;
Py_ssize_t end;
PyObject *reasonObj = NULL;
char buffer[1000];
PyObject *result = NULL;
self = arg;
@ -1461,31 +1458,28 @@ UnicodeTranslateError__str__(PyObject *self, PyObject *arg)
if (end==start+1) {
int badchar = (int)PyUnicode_AS_UNICODE(objectObj)[start];
char *format;
/* XXX %zd? */
char badchar_str[20];
if (badchar <= 0xff)
format = "can't translate character u'\\x%02x' in position %d: %.400s";
PyOS_snprintf(badchar_str, sizeof(badchar_str), "x%02x", badchar);
else if (badchar <= 0xffff)
format = "can't translate character u'\\u%04x' in position %d: %.400s";
PyOS_snprintf(badchar_str, sizeof(badchar_str), "u%04x", badchar);
else
format = "can't translate character u'\\U%08x' in position %d: %.400s";
PyOS_snprintf(buffer, sizeof(buffer),
format,
badchar,
(int)start,
PyOS_snprintf(badchar_str, sizeof(badchar_str), "U%08x", badchar);
result = PyString_FromFormat(
"can't translate character u'\\%s' in position %zd: %.400s",
badchar_str,
start,
PyString_AS_STRING(reasonObj)
);
}
else {
/* XXX %zd? */
PyOS_snprintf(buffer, sizeof(buffer),
"can't translate characters in position %d-%d: %.400s",
(int)start,
(int)(end-1),
result = PyString_FromFormat(
"can't translate characters in position %zd-%zd: %.400s",
start,
(end-1),
PyString_AS_STRING(reasonObj)
);
}
result = PyString_FromString(buffer);
error:
Py_XDECREF(reasonObj);