const void **ptr;
{
if ( index != 0 ) {
- PyErr_SetString(PyExc_SystemError, "Accessing non-existent string segment");
+ PyErr_SetString(PyExc_SystemError,
+ "Accessing non-existent string segment");
return -1;
}
*ptr = (void *)self->ob_sval;
int index;
const void **ptr;
{
- PyErr_SetString(PyExc_TypeError, "Cannot use string as modifyable buffer");
+ PyErr_SetString(PyExc_TypeError,
+ "Cannot use string as modifyable buffer");
return -1;
}
char *keystart;
int keylen;
PyObject *key;
+ int pcount = 1;
if (dict == NULL) {
PyErr_SetString(PyExc_TypeError,
++fmt;
--fmtcnt;
keystart = fmt;
- while (--fmtcnt >= 0 && *fmt != ')')
+ /* Skip over balanced parentheses */
+ while (pcount > 0 && --fmtcnt >= 0) {
+ if (*fmt == ')')
+ --pcount;
+ else if (*fmt == '(')
+ ++pcount;
fmt++;
- keylen = fmt - keystart;
- ++fmt;
- if (fmtcnt < 0) {
+ }
+ keylen = fmt - keystart - 1;
+ if (fmtcnt < 0 || pcount > 0) {
PyErr_SetString(PyExc_ValueError,
"incomplete format key");
goto error;
goto error;
break;
default:
- PyErr_SetString(PyExc_ValueError,
- "unsupported format character");
+ PyErr_Format(PyExc_ValueError,
+ "unsupported format character '%c' (0x%x)",
+ c, c);
goto error;
}
if (sign) {