diff options
author | Valery Febvre <vfebvre at easter-eggs.com> | 2004-04-02 00:54:07 +0000 |
---|---|---|
committer | Valery Febvre <vfebvre at easter-eggs.com> | 2004-04-02 00:54:07 +0000 |
commit | b6c73fd19c79ce9c548090466e5a514a61da36ae (patch) | |
tree | 7cccd562a2640b30c2f539e990c96f5881f273ca /python/utils.c | |
parent | d09a0de3b0e667b96ca722f374f04baeb164224b (diff) | |
download | lasso-b6c73fd19c79ce9c548090466e5a514a61da36ae.tar.gz lasso-b6c73fd19c79ce9c548090466e5a514a61da36ae.tar.xz lasso-b6c73fd19c79ce9c548090466e5a514a61da36ae.zip |
Initial commit
Diffstat (limited to 'python/utils.c')
-rw-r--r-- | python/utils.c | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/python/utils.c b/python/utils.c new file mode 100644 index 00000000..3ea4d171 --- /dev/null +++ b/python/utils.c @@ -0,0 +1,100 @@ +/* $Id$ + * + * PyXMLSec - Python bindings for XML Security library (XMLSec) + * + * Copyright (C) 2003-2004 Easter-eggs, Valery Febvre + * http://pyxmlsec.labs.libre-entreprise.org + * + * Author: Valery Febvre <vfebvre@easter-eggs.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include <stdarg.h> + +#include "utils.h" + +int CheckArgs(PyObject *args, char *format) { + PyObject *obj; + int i, nb_args; + + nb_args = PyTuple_GET_SIZE(args); + + /* lowercase means that arg is optional */ + /* O : Instance */ + /* C : Callable */ + /* S : String */ + /* I : Integer */ + /* F : File */ + for (i = 0; i < nb_args; i++) { + obj = PyTuple_GET_ITEM(args, i); + /* O or o : instance */ + if (format[i] == 'O' || format[i] == 'o') { + if (!PyInstance_Check(obj)) { + if (format[i] == 'o' && obj == Py_None) continue; + PyErr_Format(xmlsec_error, + "%s() argument %d must be an instance.", + format + nb_args, i+1); + return 0; + } + } + /* C or c : callable */ + else if (format[i] == 'C' || format[i] == 'c') { + if (!PyCallable_Check(obj)) { + if (format[i] == 'c' && obj == Py_None) continue; + PyErr_Format(xmlsec_error, + "%s() argument %d must be callable.", + format + nb_args, i+1); + return 0; + } + } + /* S or s : string */ + else if (format[i] == 'S' || format[i] == 's') { + if (!PyString_Check(obj)) { + if (format[i] == 's' && obj == Py_None) continue; + PyErr_Format(xmlsec_error, + "%s() argument %d must be a string.", + format + nb_args, i+1); + return 0; + } + } + /* I or i : integer */ + else if (format[i] == 'I' || format[i] == 'i') { + if (!PyInt_Check(obj)) { + if (format[i] == 'i' && obj == Py_None) continue; + PyErr_Format(xmlsec_error, + "%s() argument %d must be an integer.", + format + nb_args, i+1); + return 0; + } + } + /* F or f : file */ + else if (format[i] == 'F' || format[i] == 'f') { + if (!PyFile_Check(obj)) { + if (format[i] == 'f' && obj == Py_None) continue; + PyErr_Format(xmlsec_error, + "%s() argument %d must be a file.", + format + nb_args, i+1); + return 0; + } + } + /* type is variable */ + else if (format[i] == '?') { + continue; + } + } + + return 1; +} |