py_xattr: Fix a "ignoring return value" warning
[bbaumbach/samba-autobuild/.git] / source4 / librpc / ndr / py_xattr.c
1 /*
2    Unix SMB/CIFS implementation.
3    Samba utility functions
4    Copyright (C) Matthieu Patou <mat@matws.net> 2010
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include <Python.h>
21
22 static void PyType_AddMethods(PyTypeObject *type, PyMethodDef *methods)
23 {
24         PyObject *dict;
25         int i;
26         if (type->tp_dict == NULL)
27                 type->tp_dict = PyDict_New();
28         dict = type->tp_dict;
29         for (i = 0; methods[i].ml_name; i++) {
30                 PyObject *descr;
31                 if (methods[i].ml_flags & METH_CLASS)
32                         descr = PyCFunction_New(&methods[i], (PyObject *)type);
33                 else
34                         descr = PyDescr_NewMethod(type, &methods[i]);
35                 PyDict_SetItemString(dict, methods[i].ml_name,
36                                      descr);
37         }
38 }
39
40 static void ntacl_print_debug_helper(struct ndr_print *ndr, const char *format, ...) PRINTF_ATTRIBUTE(2,3);
41
42 static void ntacl_print_debug_helper(struct ndr_print *ndr, const char *format, ...)
43 {
44         va_list ap;
45         char *s = NULL;
46         int i, ret;
47
48         va_start(ap, format);
49         ret = vasprintf(&s, format, ap);
50         va_end(ap);
51
52         if (ret == -1) {
53                 return;
54         }
55
56         for (i=0;i<ndr->depth;i++) {
57                 printf("    ");
58         }
59
60         printf("%s\n", s);
61         free(s);
62 }
63
64 static PyObject *py_ntacl_print(PyObject *self, PyObject *args)
65 {
66         struct xattr_NTACL *ntacl = pytalloc_get_ptr(self);
67         struct ndr_print *pr;
68         TALLOC_CTX *mem_ctx;
69
70         mem_ctx = talloc_new(NULL);
71
72         pr = talloc_zero(mem_ctx, struct ndr_print);
73         if (!pr) {
74                 PyErr_NoMemory();
75                 talloc_free(mem_ctx);
76                 return NULL;
77         }
78         pr->print = ntacl_print_debug_helper;
79         ndr_print_xattr_NTACL(pr, "file", ntacl);
80
81         talloc_free(mem_ctx);
82
83         Py_RETURN_NONE;
84 }
85
86 static PyMethodDef py_ntacl_extra_methods[] = {
87         { "dump", (PyCFunction)py_ntacl_print, METH_NOARGS,
88                 NULL },
89         { NULL }
90 };
91
92 static void py_xattr_NTACL_patch(PyTypeObject *type)
93 {
94         PyType_AddMethods(type, py_ntacl_extra_methods);
95 }
96
97 #define PY_NTACL_PATCH py_xattr_NTACL_patch
98
99