Branch data Line data Source code
1 : : /*
2 : : Authors:
3 : : Jakub Hrozek <jhrozek@redhat.com>
4 : :
5 : : Copyright (C) 2011 Red Hat
6 : :
7 : : This program is free software; you can redistribute it and/or modify
8 : : it under the terms of the GNU General Public License as published by
9 : : the Free Software Foundation; either version 3 of the License, or
10 : : (at your option) any later version.
11 : :
12 : : This program is distributed in the hope that it will be useful,
13 : : but WITHOUT ANY WARRANTY; without even the implied warranty of
14 : : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 : : GNU General Public License for more details.
16 : :
17 : : You should have received a copy of the GNU General Public License
18 : : along with this program. If not, see <http://www.gnu.org/licenses/>.
19 : : */
20 : :
21 : : #include "src/util/sss_python.h"
22 : : #include "config.h"
23 : :
24 : : PyObject *
25 : 56 : sss_python_set_new(void)
26 : : {
27 : : #ifdef HAVE_PYSET_NEW
28 : 56 : return PySet_New(NULL);
29 : : #else
30 : : return PyObject_CallObject((PyObject *) &PySet_Type, NULL);
31 : : #endif
32 : : }
33 : :
34 : : int
35 : 57 : sss_python_set_add(PyObject *set, PyObject *key)
36 : : {
37 : : #ifdef HAVE_PYSET_ADD
38 : 57 : return PySet_Add(set, key);
39 : : #else
40 : : PyObject *pyret;
41 : : int ret;
42 : :
43 : : pyret = PyObject_CallMethod(set, sss_py_const_p(char, "add"),
44 : : sss_py_const_p(char, "O"), key);
45 : : ret = (pyret == NULL) ? -1 : 0;
46 : : Py_XDECREF(pyret);
47 : : return ret;
48 : : #endif
49 : : }
50 : :
51 : : bool
52 : 5 : sss_python_set_check(PyObject *set)
53 : : {
54 : : #if HAVE_DECL_PYSET_CHECK
55 [ + + ][ - + ]: 5 : return PySet_Check(set);
56 : : #else
57 : : return PyObject_TypeCheck(set, &PySet_Type);
58 : : #endif
59 : : }
60 : :
61 : : PyObject *
62 : 82 : sss_python_unicode_from_string(const char *u)
63 : : {
64 : : #ifdef HAVE_PYUNICODE_FROMSTRING
65 : : return PyUnicode_FromString(u);
66 : : #else
67 : 82 : return PyUnicode_DecodeUTF8(u, strlen(u), NULL);
68 : : #endif
69 : : }
70 : :
71 : : PyObject *
72 : 1 : sss_exception_with_doc(char *name, char *doc, PyObject *base, PyObject *dict)
73 : : {
74 : : #ifdef HAVE_PYERR_NEWEXCEPTIONWITHDOC
75 : 1 : return PyErr_NewExceptionWithDoc(name, doc, base, dict);
76 : : #else
77 : : int result;
78 : : PyObject *ret = NULL;
79 : : PyObject *mydict = NULL; /* points to the dict only if we create it */
80 : : PyObject *docobj;
81 : :
82 : : if (dict == NULL) {
83 : : dict = mydict = PyDict_New();
84 : : if (dict == NULL) {
85 : : return NULL;
86 : : }
87 : : }
88 : :
89 : : if (doc != NULL) {
90 : : docobj = PyString_FromString(doc);
91 : : if (docobj == NULL)
92 : : goto failure;
93 : : result = PyDict_SetItemString(dict, "__doc__", docobj);
94 : : Py_DECREF(docobj);
95 : : if (result < 0)
96 : : goto failure;
97 : : }
98 : :
99 : : ret = PyErr_NewException(name, base, dict);
100 : : failure:
101 : : Py_XDECREF(mydict);
102 : : return ret;
103 : : #endif
104 : : }
|