diff options
author | Tim Potter <tpot@samba.org> | 2002-11-04 20:33:16 +0000 |
---|---|---|
committer | Tim Potter <tpot@samba.org> | 2002-11-04 20:33:16 +0000 |
commit | ea6d5bc48bd14f8eaca665576d7094cce53be81a (patch) | |
tree | 4d94caa26ac4186ca77d6613098bf01f31ef6a56 /source3/python/py_tdbpack.c | |
parent | 44847694737255fc9184b5e5c113d4e786b76afd (diff) | |
download | samba-ea6d5bc48bd14f8eaca665576d7094cce53be81a.tar.gz samba-ea6d5bc48bd14f8eaca665576d7094cce53be81a.tar.bz2 samba-ea6d5bc48bd14f8eaca665576d7094cce53be81a.zip |
Sync with HEAD.
(This used to be commit 0310e539bb41f569c7ae77b2d131e966adefa27b)
Diffstat (limited to 'source3/python/py_tdbpack.c')
-rw-r--r-- | source3/python/py_tdbpack.c | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/source3/python/py_tdbpack.c b/source3/python/py_tdbpack.c index e5044943be..06aebe61eb 100644 --- a/source3/python/py_tdbpack.c +++ b/source3/python/py_tdbpack.c @@ -329,18 +329,35 @@ pytdbpack_calc_reqd_len(char *format_str, } +static PyObject *pytdbpack_bad_type(char ch, + const char *expected, + PyObject *val_obj) +{ + PyObject *r = PyObject_Repr(val_obj); + if (!r) + return NULL; + PyErr_Format(PyExc_TypeError, + "tdbpack: format '%c' requires %s, not %s", + ch, expected, PyString_AS_STRING(r)); + Py_DECREF(r); + return val_obj; +} + + /* - Calculate the number of bytes required to pack a single value. -*/ + * Calculate the number of bytes required to pack a single value. While doing + * this, also conduct some initial checks that the argument types are + * reasonable. + * + * Returns -1 on exception. + */ static int pytdbpack_calc_item_len(char ch, PyObject *val_obj) { if (ch == 'd' || ch == 'w') { if (!PyInt_Check(val_obj)) { - PyErr_Format(PyExc_TypeError, - "tdbpack: format '%c' requires an Int", - ch); + pytdbpack_bad_type(ch, "Int", val_obj); return -1; } if (ch == 'w') @@ -353,10 +370,7 @@ pytdbpack_calc_item_len(char ch, else if (ch == 'f' || ch == 'P' || ch == 'B') { /* nul-terminated 8-bit string */ if (!PyString_Check(val_obj)) { - PyErr_Format(PyExc_TypeError, - "tdbpack: format '%c' requires a String", - ch); - return -1; + pytdbpack_bad_type(ch, "String", val_obj); } if (ch == 'B') { @@ -371,7 +385,7 @@ pytdbpack_calc_item_len(char ch, } else { PyErr_Format(PyExc_ValueError, - __FUNCTION__ ": format character '%c' is not supported", + "tdbpack: format character '%c' is not supported", ch); return -1; |