xref: /aosp_15_r20/external/selinux/libsemanage/src/semanageswig_python.i (revision 2d543d20722ada2425b5bdab9d0d1d29470e7bba)
1*2d543d20SAndroid Build Coastguard Worker /* Author: Spencer Shimko <[email protected]>
2*2d543d20SAndroid Build Coastguard Worker  *
3*2d543d20SAndroid Build Coastguard Worker  * Copyright (C) 2004-2005 Tresys Technology, LLC
4*2d543d20SAndroid Build Coastguard Worker  * Copyright (C) 2006 Red Hat, Inc
5*2d543d20SAndroid Build Coastguard Worker  *
6*2d543d20SAndroid Build Coastguard Worker  *  This library is free software; you can redistribute it and/or
7*2d543d20SAndroid Build Coastguard Worker  *  modify it under the terms of the GNU Lesser General Public
8*2d543d20SAndroid Build Coastguard Worker  *  License as published by the Free Software Foundation; either
9*2d543d20SAndroid Build Coastguard Worker  *  version 2.1 of the License, or (at your option) any later version.
10*2d543d20SAndroid Build Coastguard Worker  *
11*2d543d20SAndroid Build Coastguard Worker  *  This library is distributed in the hope that it will be useful,
12*2d543d20SAndroid Build Coastguard Worker  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13*2d543d20SAndroid Build Coastguard Worker  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14*2d543d20SAndroid Build Coastguard Worker  *  Lesser General Public License for more details.
15*2d543d20SAndroid Build Coastguard Worker  *
16*2d543d20SAndroid Build Coastguard Worker  *  You should have received a copy of the GNU Lesser General Public
17*2d543d20SAndroid Build Coastguard Worker  *  License along with this library; if not, write to the Free Software
18*2d543d20SAndroid Build Coastguard Worker  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19*2d543d20SAndroid Build Coastguard Worker  */
20*2d543d20SAndroid Build Coastguard Worker 
21*2d543d20SAndroid Build Coastguard Worker /** standard typemaps **/
22*2d543d20SAndroid Build Coastguard Worker 
23*2d543d20SAndroid Build Coastguard Worker %header %{
24*2d543d20SAndroid Build Coastguard Worker 	#include <stdlib.h>
25*2d543d20SAndroid Build Coastguard Worker 	#include <semanage/semanage.h>
26*2d543d20SAndroid Build Coastguard Worker 	#include <sys/mman.h>
27*2d543d20SAndroid Build Coastguard Worker 
28*2d543d20SAndroid Build Coastguard Worker 	#define STATUS_SUCCESS 0
29*2d543d20SAndroid Build Coastguard Worker 	#define STATUS_ERR -1
30*2d543d20SAndroid Build Coastguard Worker %}
31*2d543d20SAndroid Build Coastguard Worker 
32*2d543d20SAndroid Build Coastguard Worker %include "stdint.i"
33*2d543d20SAndroid Build Coastguard Worker 
34*2d543d20SAndroid Build Coastguard Worker %wrapper %{
35*2d543d20SAndroid Build Coastguard Worker 
36*2d543d20SAndroid Build Coastguard Worker 
37*2d543d20SAndroid Build Coastguard Worker 	/* There are two ways to call this function:
38*2d543d20SAndroid Build Coastguard Worker 	 * One is with a valid swig_type and destructor.
39*2d543d20SAndroid Build Coastguard Worker 	 * Two is with a NULL swig_type and NULL destructor.
40*2d543d20SAndroid Build Coastguard Worker 	 *
41*2d543d20SAndroid Build Coastguard Worker 	 * In the first mode, the function converts
42*2d543d20SAndroid Build Coastguard Worker 	 * an array of *cloned* objects [of the given pointer swig type]
43*2d543d20SAndroid Build Coastguard Worker 	 * into a PyList, and destroys the array in the process
44*2d543d20SAndroid Build Coastguard Worker 	 * (the objects pointers are preserved).
45*2d543d20SAndroid Build Coastguard Worker 	 *
46*2d543d20SAndroid Build Coastguard Worker 	 * In the second mode, the function converts
47*2d543d20SAndroid Build Coastguard Worker 	 * an array of *constant* strings into a PyList, and destroys
48*2d543d20SAndroid Build Coastguard Worker 	 * the array in the process
49*2d543d20SAndroid Build Coastguard Worker 	 * (the strings are copied, originals not freed). */
50*2d543d20SAndroid Build Coastguard Worker 
semanage_array2plist(semanage_handle_t * handle,void ** arr,unsigned int asize,swig_type_info * swig_type,void (* destructor)(void *),PyObject ** result)51*2d543d20SAndroid Build Coastguard Worker 	static int semanage_array2plist(
52*2d543d20SAndroid Build Coastguard Worker 		semanage_handle_t* handle,
53*2d543d20SAndroid Build Coastguard Worker 		void** arr,
54*2d543d20SAndroid Build Coastguard Worker 		unsigned int asize,
55*2d543d20SAndroid Build Coastguard Worker 		swig_type_info* swig_type,
56*2d543d20SAndroid Build Coastguard Worker 		void (*destructor) (void*),
57*2d543d20SAndroid Build Coastguard Worker 		PyObject** result) {
58*2d543d20SAndroid Build Coastguard Worker 
59*2d543d20SAndroid Build Coastguard Worker 		PyObject* plist = PyList_New(0);
60*2d543d20SAndroid Build Coastguard Worker 		unsigned int i;
61*2d543d20SAndroid Build Coastguard Worker 
62*2d543d20SAndroid Build Coastguard Worker 		if (!plist)
63*2d543d20SAndroid Build Coastguard Worker 			goto err;
64*2d543d20SAndroid Build Coastguard Worker 
65*2d543d20SAndroid Build Coastguard Worker 		for (i = 0; i < asize; i++)  {
66*2d543d20SAndroid Build Coastguard Worker 
67*2d543d20SAndroid Build Coastguard Worker 			PyObject* obj = NULL;
68*2d543d20SAndroid Build Coastguard Worker 
69*2d543d20SAndroid Build Coastguard Worker 			/* NULL indicates string conversion,
70*2d543d20SAndroid Build Coastguard Worker 			 * otherwise create an opaque pointer */
71*2d543d20SAndroid Build Coastguard Worker 			if (!swig_type)
72*2d543d20SAndroid Build Coastguard Worker 				obj = SWIG_FromCharPtr(arr[i]);
73*2d543d20SAndroid Build Coastguard Worker 			else
74*2d543d20SAndroid Build Coastguard Worker 				obj = SWIG_NewPointerObj(arr[i], swig_type, 0);
75*2d543d20SAndroid Build Coastguard Worker 
76*2d543d20SAndroid Build Coastguard Worker 			if (!obj)
77*2d543d20SAndroid Build Coastguard Worker 				goto err;
78*2d543d20SAndroid Build Coastguard Worker 
79*2d543d20SAndroid Build Coastguard Worker 			if (PyList_Append(plist, obj) < 0)
80*2d543d20SAndroid Build Coastguard Worker 				goto err;
81*2d543d20SAndroid Build Coastguard Worker 		}
82*2d543d20SAndroid Build Coastguard Worker 
83*2d543d20SAndroid Build Coastguard Worker 		free(arr);
84*2d543d20SAndroid Build Coastguard Worker 
85*2d543d20SAndroid Build Coastguard Worker 		*result = plist;
86*2d543d20SAndroid Build Coastguard Worker 		return STATUS_SUCCESS;
87*2d543d20SAndroid Build Coastguard Worker 
88*2d543d20SAndroid Build Coastguard Worker 		err:
89*2d543d20SAndroid Build Coastguard Worker 		for (i = 0; i < asize; i++)
90*2d543d20SAndroid Build Coastguard Worker 			if (destructor)
91*2d543d20SAndroid Build Coastguard Worker 				destructor(arr[i]);
92*2d543d20SAndroid Build Coastguard Worker 		free(arr);
93*2d543d20SAndroid Build Coastguard Worker 		return STATUS_ERR;
94*2d543d20SAndroid Build Coastguard Worker 	}
95*2d543d20SAndroid Build Coastguard Worker %}
96*2d543d20SAndroid Build Coastguard Worker /* a few helpful typemaps are available in this library */
97*2d543d20SAndroid Build Coastguard Worker %include <typemaps.i>
98*2d543d20SAndroid Build Coastguard Worker /* wrap all int*'s so they can be used for results
99*2d543d20SAndroid Build Coastguard Worker    if it becomes necessary to send in data this should be changed to INOUT */
100*2d543d20SAndroid Build Coastguard Worker %apply int *OUTPUT { int * };
101*2d543d20SAndroid Build Coastguard Worker %apply int *OUTPUT { size_t * };
102*2d543d20SAndroid Build Coastguard Worker %apply int *OUTPUT { unsigned int * };
103*2d543d20SAndroid Build Coastguard Worker %apply int *OUTPUT { uint16_t * };
104*2d543d20SAndroid Build Coastguard Worker 
105*2d543d20SAndroid Build Coastguard Worker %include <cstring.i>
106*2d543d20SAndroid Build Coastguard Worker /* This is needed to properly mmap binary data in SWIG */
107*2d543d20SAndroid Build Coastguard Worker %cstring_output_allocate_size(void **mapped_data, size_t *data_len, munmap(*$1, *$2));
108*2d543d20SAndroid Build Coastguard Worker 
109*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) char **(char *temp=NULL) {
110*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
111*2d543d20SAndroid Build Coastguard Worker }
112*2d543d20SAndroid Build Coastguard Worker 
113*2d543d20SAndroid Build Coastguard Worker %typemap(argout) char** {
114*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_FromCharPtr(*$1));
115*2d543d20SAndroid Build Coastguard Worker 	free(*$1);
116*2d543d20SAndroid Build Coastguard Worker }
117*2d543d20SAndroid Build Coastguard Worker 
118*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) char ***(char **temp=NULL) {
119*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
120*2d543d20SAndroid Build Coastguard Worker }
121*2d543d20SAndroid Build Coastguard Worker 
122*2d543d20SAndroid Build Coastguard Worker %typemap(argout) (
123*2d543d20SAndroid Build Coastguard Worker  	semanage_handle_t* handle,
124*2d543d20SAndroid Build Coastguard Worker 	const semanage_user_t* user,
125*2d543d20SAndroid Build Coastguard Worker 	const char*** roles_arr,
126*2d543d20SAndroid Build Coastguard Worker 	unsigned int* num_roles) {
127*2d543d20SAndroid Build Coastguard Worker 
128*2d543d20SAndroid Build Coastguard Worker 	if ($result) {
129*2d543d20SAndroid Build Coastguard Worker 		int value;
130*2d543d20SAndroid Build Coastguard Worker 		SWIG_AsVal_int($result, &value);
131*2d543d20SAndroid Build Coastguard Worker 		if (value >= 0) {
132*2d543d20SAndroid Build Coastguard Worker 			PyObject* plist = NULL;
133*2d543d20SAndroid Build Coastguard Worker 			if (semanage_array2plist($1, (void**) *$3, *$4,
134*2d543d20SAndroid Build Coastguard Worker                         	NULL, NULL, &plist) < 0)
135*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_From_int(STATUS_ERR);
136*2d543d20SAndroid Build Coastguard Worker 			else
137*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_AppendOutput($result, plist);
138*2d543d20SAndroid Build Coastguard Worker 		}
139*2d543d20SAndroid Build Coastguard Worker 	}
140*2d543d20SAndroid Build Coastguard Worker }
141*2d543d20SAndroid Build Coastguard Worker 
142*2d543d20SAndroid Build Coastguard Worker /** module typemaps**/
143*2d543d20SAndroid Build Coastguard Worker 
144*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions
145*2d543d20SAndroid Build Coastguard Worker    will not take the semanage_module_info_t ** parameter */
146*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_module_info_t **(semanage_module_info_t *temp=NULL) {
147*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
148*2d543d20SAndroid Build Coastguard Worker }
149*2d543d20SAndroid Build Coastguard Worker 
150*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_module_info_t ** {
151*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
152*2d543d20SAndroid Build Coastguard Worker }
153*2d543d20SAndroid Build Coastguard Worker 
154*2d543d20SAndroid Build Coastguard Worker /** module key typemaps **/
155*2d543d20SAndroid Build Coastguard Worker 
156*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions
157*2d543d20SAndroid Build Coastguard Worker    will not take the semanage_module_key_t ** parameter */
158*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_module_key_t **(semanage_module_key_t *temp=NULL) {
159*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
160*2d543d20SAndroid Build Coastguard Worker }
161*2d543d20SAndroid Build Coastguard Worker 
162*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_module_key_t ** {
163*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
164*2d543d20SAndroid Build Coastguard Worker }
165*2d543d20SAndroid Build Coastguard Worker 
166*2d543d20SAndroid Build Coastguard Worker /** context typemaps **/
167*2d543d20SAndroid Build Coastguard Worker 
168*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions
169*2d543d20SAndroid Build Coastguard Worker    will not take the semanage_context_t ** parameter */
170*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_context_t **(semanage_context_t *temp=NULL) {
171*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
172*2d543d20SAndroid Build Coastguard Worker }
173*2d543d20SAndroid Build Coastguard Worker 
174*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_context_t** {
175*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
176*2d543d20SAndroid Build Coastguard Worker }
177*2d543d20SAndroid Build Coastguard Worker 
178*2d543d20SAndroid Build Coastguard Worker /** boolean typemaps **/
179*2d543d20SAndroid Build Coastguard Worker 
180*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions
181*2d543d20SAndroid Build Coastguard Worker    will not take the semanage_bool_t *** parameter */
182*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_bool_t ***(semanage_bool_t **temp=NULL) {
183*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
184*2d543d20SAndroid Build Coastguard Worker }
185*2d543d20SAndroid Build Coastguard Worker 
186*2d543d20SAndroid Build Coastguard Worker %typemap(argout) (
187*2d543d20SAndroid Build Coastguard Worker  	semanage_handle_t* handle,
188*2d543d20SAndroid Build Coastguard Worker 	semanage_bool_t*** records,
189*2d543d20SAndroid Build Coastguard Worker 	unsigned int* count) {
190*2d543d20SAndroid Build Coastguard Worker 
191*2d543d20SAndroid Build Coastguard Worker 	if ($result) {
192*2d543d20SAndroid Build Coastguard Worker 		int value;
193*2d543d20SAndroid Build Coastguard Worker 		SWIG_AsVal_int($result, &value);
194*2d543d20SAndroid Build Coastguard Worker 		if (value >= 0) {
195*2d543d20SAndroid Build Coastguard Worker 			PyObject* plist = NULL;
196*2d543d20SAndroid Build Coastguard Worker 			if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_bool,
197*2d543d20SAndroid Build Coastguard Worker 				(void (*) (void*)) &semanage_bool_free, &plist) < 0)
198*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_From_int(STATUS_ERR);
199*2d543d20SAndroid Build Coastguard Worker 			else
200*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_AppendOutput($result, plist);
201*2d543d20SAndroid Build Coastguard Worker 		}
202*2d543d20SAndroid Build Coastguard Worker 	}
203*2d543d20SAndroid Build Coastguard Worker }
204*2d543d20SAndroid Build Coastguard Worker 
205*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_bool_t **(semanage_bool_t *temp=NULL) {
206*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
207*2d543d20SAndroid Build Coastguard Worker }
208*2d543d20SAndroid Build Coastguard Worker 
209*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_bool_t ** {
210*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
211*2d543d20SAndroid Build Coastguard Worker }
212*2d543d20SAndroid Build Coastguard Worker 
213*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_bool_key_t ** {
214*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
215*2d543d20SAndroid Build Coastguard Worker }
216*2d543d20SAndroid Build Coastguard Worker 
217*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_bool_key_t **(semanage_bool_key_t *temp=NULL) {
218*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
219*2d543d20SAndroid Build Coastguard Worker }
220*2d543d20SAndroid Build Coastguard Worker 
221*2d543d20SAndroid Build Coastguard Worker /** fcontext typemaps **/
222*2d543d20SAndroid Build Coastguard Worker 
223*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions
224*2d543d20SAndroid Build Coastguard Worker    will not take the semanage_fcontext_t *** parameter */
225*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_fcontext_t ***(semanage_fcontext_t **temp=NULL) {
226*2d543d20SAndroid Build Coastguard Worker         $1 = &temp;
227*2d543d20SAndroid Build Coastguard Worker }
228*2d543d20SAndroid Build Coastguard Worker 
229*2d543d20SAndroid Build Coastguard Worker %typemap(argout) (
230*2d543d20SAndroid Build Coastguard Worker  	semanage_handle_t* handle,
231*2d543d20SAndroid Build Coastguard Worker 	semanage_fcontext_t*** records,
232*2d543d20SAndroid Build Coastguard Worker 	unsigned int* count) {
233*2d543d20SAndroid Build Coastguard Worker 
234*2d543d20SAndroid Build Coastguard Worker 	if ($result) {
235*2d543d20SAndroid Build Coastguard Worker 		int value;
236*2d543d20SAndroid Build Coastguard Worker 		SWIG_AsVal_int($result, &value);
237*2d543d20SAndroid Build Coastguard Worker 		if (value >= 0) {
238*2d543d20SAndroid Build Coastguard Worker 			PyObject* plist = NULL;
239*2d543d20SAndroid Build Coastguard Worker 			if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_fcontext,
240*2d543d20SAndroid Build Coastguard Worker 				(void (*) (void*)) &semanage_fcontext_free, &plist) < 0)
241*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_From_int(STATUS_ERR);
242*2d543d20SAndroid Build Coastguard Worker 			else
243*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_AppendOutput($result, plist);
244*2d543d20SAndroid Build Coastguard Worker 		}
245*2d543d20SAndroid Build Coastguard Worker 	}
246*2d543d20SAndroid Build Coastguard Worker }
247*2d543d20SAndroid Build Coastguard Worker 
248*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_fcontext_t **(semanage_fcontext_t *temp=NULL) {
249*2d543d20SAndroid Build Coastguard Worker         $1 = &temp;
250*2d543d20SAndroid Build Coastguard Worker }
251*2d543d20SAndroid Build Coastguard Worker 
252*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_fcontext_t ** {
253*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
254*2d543d20SAndroid Build Coastguard Worker }
255*2d543d20SAndroid Build Coastguard Worker 
256*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_fcontext_key_t ** {
257*2d543d20SAndroid Build Coastguard Worker         $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
258*2d543d20SAndroid Build Coastguard Worker }
259*2d543d20SAndroid Build Coastguard Worker 
260*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_fcontext_key_t **(semanage_fcontext_key_t *temp=NULL) {
261*2d543d20SAndroid Build Coastguard Worker         $1 = &temp;
262*2d543d20SAndroid Build Coastguard Worker }
263*2d543d20SAndroid Build Coastguard Worker 
264*2d543d20SAndroid Build Coastguard Worker /** interface typemaps **/
265*2d543d20SAndroid Build Coastguard Worker 
266*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions
267*2d543d20SAndroid Build Coastguard Worker    will not take the semanage_iface_t *** parameter */
268*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_iface_t ***(semanage_iface_t **temp=NULL) {
269*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
270*2d543d20SAndroid Build Coastguard Worker }
271*2d543d20SAndroid Build Coastguard Worker 
272*2d543d20SAndroid Build Coastguard Worker 
273*2d543d20SAndroid Build Coastguard Worker %typemap(argout) (
274*2d543d20SAndroid Build Coastguard Worker  	semanage_handle_t* handle,
275*2d543d20SAndroid Build Coastguard Worker 	semanage_iface_t*** records,
276*2d543d20SAndroid Build Coastguard Worker 	unsigned int* count) {
277*2d543d20SAndroid Build Coastguard Worker 
278*2d543d20SAndroid Build Coastguard Worker 	if ($result) {
279*2d543d20SAndroid Build Coastguard Worker 		int value;
280*2d543d20SAndroid Build Coastguard Worker 		SWIG_AsVal_int($result, &value);
281*2d543d20SAndroid Build Coastguard Worker 		if (value >= 0) {
282*2d543d20SAndroid Build Coastguard Worker 			PyObject* plist = NULL;
283*2d543d20SAndroid Build Coastguard Worker 			if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_iface,
284*2d543d20SAndroid Build Coastguard Worker 				(void (*) (void*)) &semanage_iface_free, &plist) < 0)
285*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_From_int(STATUS_ERR);
286*2d543d20SAndroid Build Coastguard Worker 			else
287*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_AppendOutput($result, plist);
288*2d543d20SAndroid Build Coastguard Worker 		}
289*2d543d20SAndroid Build Coastguard Worker 	}
290*2d543d20SAndroid Build Coastguard Worker }
291*2d543d20SAndroid Build Coastguard Worker 
292*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_iface_t **(semanage_iface_t *temp=NULL) {
293*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
294*2d543d20SAndroid Build Coastguard Worker }
295*2d543d20SAndroid Build Coastguard Worker 
296*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_iface_t ** {
297*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
298*2d543d20SAndroid Build Coastguard Worker }
299*2d543d20SAndroid Build Coastguard Worker 
300*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_iface_key_t ** {
301*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
302*2d543d20SAndroid Build Coastguard Worker }
303*2d543d20SAndroid Build Coastguard Worker 
304*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_iface_key_t **(semanage_iface_key_t *temp=NULL) {
305*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
306*2d543d20SAndroid Build Coastguard Worker }
307*2d543d20SAndroid Build Coastguard Worker 
308*2d543d20SAndroid Build Coastguard Worker /** seuser typemaps **/
309*2d543d20SAndroid Build Coastguard Worker 
310*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions
311*2d543d20SAndroid Build Coastguard Worker    will not take the semanage_seuser_t *** parameter */
312*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_seuser_t ***(semanage_seuser_t **temp=NULL) {
313*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
314*2d543d20SAndroid Build Coastguard Worker }
315*2d543d20SAndroid Build Coastguard Worker 
316*2d543d20SAndroid Build Coastguard Worker 
317*2d543d20SAndroid Build Coastguard Worker %typemap(argout) (
318*2d543d20SAndroid Build Coastguard Worker  	semanage_handle_t* handle,
319*2d543d20SAndroid Build Coastguard Worker 	semanage_seuser_t*** records,
320*2d543d20SAndroid Build Coastguard Worker 	unsigned int* count) {
321*2d543d20SAndroid Build Coastguard Worker 
322*2d543d20SAndroid Build Coastguard Worker 	if ($result) {
323*2d543d20SAndroid Build Coastguard Worker 		int value;
324*2d543d20SAndroid Build Coastguard Worker 		SWIG_AsVal_int($result, &value);
325*2d543d20SAndroid Build Coastguard Worker 		if (value >= 0) {
326*2d543d20SAndroid Build Coastguard Worker 			PyObject* plist = NULL;
327*2d543d20SAndroid Build Coastguard Worker 			if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_seuser,
328*2d543d20SAndroid Build Coastguard Worker 				(void (*) (void*)) &semanage_seuser_free, &plist) < 0)
329*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_From_int(STATUS_ERR);
330*2d543d20SAndroid Build Coastguard Worker 			else
331*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_AppendOutput($result, plist);
332*2d543d20SAndroid Build Coastguard Worker 		}
333*2d543d20SAndroid Build Coastguard Worker 	}
334*2d543d20SAndroid Build Coastguard Worker }
335*2d543d20SAndroid Build Coastguard Worker 
336*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_seuser_t **(semanage_seuser_t *temp=NULL) {
337*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
338*2d543d20SAndroid Build Coastguard Worker }
339*2d543d20SAndroid Build Coastguard Worker 
340*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_seuser_t ** {
341*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
342*2d543d20SAndroid Build Coastguard Worker }
343*2d543d20SAndroid Build Coastguard Worker 
344*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_seuser_key_t ** {
345*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
346*2d543d20SAndroid Build Coastguard Worker }
347*2d543d20SAndroid Build Coastguard Worker 
348*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_seuser_key_t **(semanage_seuser_key_t *temp=NULL) {
349*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
350*2d543d20SAndroid Build Coastguard Worker }
351*2d543d20SAndroid Build Coastguard Worker 
352*2d543d20SAndroid Build Coastguard Worker /** user typemaps **/
353*2d543d20SAndroid Build Coastguard Worker 
354*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions
355*2d543d20SAndroid Build Coastguard Worker    will not take the semanage_user_t *** parameter */
356*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_user_t ***(semanage_user_t **temp=NULL) {
357*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
358*2d543d20SAndroid Build Coastguard Worker }
359*2d543d20SAndroid Build Coastguard Worker 
360*2d543d20SAndroid Build Coastguard Worker %typemap(argout) (
361*2d543d20SAndroid Build Coastguard Worker  	semanage_handle_t* handle,
362*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t*** records,
363*2d543d20SAndroid Build Coastguard Worker 	unsigned int* count) {
364*2d543d20SAndroid Build Coastguard Worker 
365*2d543d20SAndroid Build Coastguard Worker 	if ($result) {
366*2d543d20SAndroid Build Coastguard Worker 		int value;
367*2d543d20SAndroid Build Coastguard Worker 		SWIG_AsVal_int($result, &value);
368*2d543d20SAndroid Build Coastguard Worker 		if (value >= 0) {
369*2d543d20SAndroid Build Coastguard Worker 			PyObject* plist = NULL;
370*2d543d20SAndroid Build Coastguard Worker 			if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_user,
371*2d543d20SAndroid Build Coastguard Worker 				(void (*) (void*)) &semanage_user_free, &plist) < 0)
372*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_From_int(STATUS_ERR);
373*2d543d20SAndroid Build Coastguard Worker 			else
374*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_AppendOutput($result, plist);
375*2d543d20SAndroid Build Coastguard Worker 		}
376*2d543d20SAndroid Build Coastguard Worker 	}
377*2d543d20SAndroid Build Coastguard Worker }
378*2d543d20SAndroid Build Coastguard Worker 
379*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_user_t **(semanage_user_t *temp=NULL) {
380*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
381*2d543d20SAndroid Build Coastguard Worker }
382*2d543d20SAndroid Build Coastguard Worker 
383*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_user_t ** {
384*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
385*2d543d20SAndroid Build Coastguard Worker }
386*2d543d20SAndroid Build Coastguard Worker 
387*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_user_key_t ** {
388*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
389*2d543d20SAndroid Build Coastguard Worker }
390*2d543d20SAndroid Build Coastguard Worker 
391*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_user_key_t **(semanage_user_key_t *temp=NULL) {
392*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
393*2d543d20SAndroid Build Coastguard Worker }
394*2d543d20SAndroid Build Coastguard Worker 
395*2d543d20SAndroid Build Coastguard Worker /** port typemaps **/
396*2d543d20SAndroid Build Coastguard Worker 
397*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions
398*2d543d20SAndroid Build Coastguard Worker    will not take the semanage_port_t *** parameter */
399*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_port_t ***(semanage_port_t **temp=NULL) {
400*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
401*2d543d20SAndroid Build Coastguard Worker }
402*2d543d20SAndroid Build Coastguard Worker 
403*2d543d20SAndroid Build Coastguard Worker %typemap(argout) (
404*2d543d20SAndroid Build Coastguard Worker  	semanage_handle_t* handle,
405*2d543d20SAndroid Build Coastguard Worker 	semanage_port_t*** records,
406*2d543d20SAndroid Build Coastguard Worker 	unsigned int* count) {
407*2d543d20SAndroid Build Coastguard Worker 
408*2d543d20SAndroid Build Coastguard Worker 	if ($result) {
409*2d543d20SAndroid Build Coastguard Worker 		int value;
410*2d543d20SAndroid Build Coastguard Worker 		SWIG_AsVal_int($result, &value);
411*2d543d20SAndroid Build Coastguard Worker 		if (value >= 0) {
412*2d543d20SAndroid Build Coastguard Worker 			PyObject* plist = NULL;
413*2d543d20SAndroid Build Coastguard Worker 			if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_port,
414*2d543d20SAndroid Build Coastguard Worker 				(void (*) (void*)) &semanage_port_free, &plist) < 0)
415*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_From_int(STATUS_ERR);
416*2d543d20SAndroid Build Coastguard Worker 			else
417*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_AppendOutput($result, plist);
418*2d543d20SAndroid Build Coastguard Worker 		}
419*2d543d20SAndroid Build Coastguard Worker 	}
420*2d543d20SAndroid Build Coastguard Worker }
421*2d543d20SAndroid Build Coastguard Worker 
422*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_port_t **(semanage_port_t *temp=NULL) {
423*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
424*2d543d20SAndroid Build Coastguard Worker }
425*2d543d20SAndroid Build Coastguard Worker 
426*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_port_t ** {
427*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
428*2d543d20SAndroid Build Coastguard Worker }
429*2d543d20SAndroid Build Coastguard Worker 
430*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_port_key_t ** {
431*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
432*2d543d20SAndroid Build Coastguard Worker }
433*2d543d20SAndroid Build Coastguard Worker 
434*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_port_key_t **(semanage_port_key_t *temp=NULL) {
435*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
436*2d543d20SAndroid Build Coastguard Worker }
437*2d543d20SAndroid Build Coastguard Worker 
438*2d543d20SAndroid Build Coastguard Worker /** ibpkey typemaps **/
439*2d543d20SAndroid Build Coastguard Worker 
440*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions
441*2d543d20SAndroid Build Coastguard Worker    will not take the semanage_ibpkey_t *** parameter */
442*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_ibpkey_t ***(semanage_ibpkey_t **temp=NULL) {
443*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
444*2d543d20SAndroid Build Coastguard Worker }
445*2d543d20SAndroid Build Coastguard Worker 
446*2d543d20SAndroid Build Coastguard Worker %typemap(argout) (
447*2d543d20SAndroid Build Coastguard Worker 	semanage_handle_t* handle,
448*2d543d20SAndroid Build Coastguard Worker 	semanage_ibpkey_t*** records,
449*2d543d20SAndroid Build Coastguard Worker 	unsigned int* count) {
450*2d543d20SAndroid Build Coastguard Worker 
451*2d543d20SAndroid Build Coastguard Worker 	if ($result) {
452*2d543d20SAndroid Build Coastguard Worker 		int value;
453*2d543d20SAndroid Build Coastguard Worker 		SWIG_AsVal_int($result, &value);
454*2d543d20SAndroid Build Coastguard Worker 		if (value >= 0) {
455*2d543d20SAndroid Build Coastguard Worker 			PyObject* plist = NULL;
456*2d543d20SAndroid Build Coastguard Worker 			if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_ibpkey,
457*2d543d20SAndroid Build Coastguard Worker 				(void (*) (void*)) &semanage_ibpkey_free, &plist) < 0)
458*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_From_int(STATUS_ERR);
459*2d543d20SAndroid Build Coastguard Worker 			else
460*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_AppendOutput($result, plist);
461*2d543d20SAndroid Build Coastguard Worker 		}
462*2d543d20SAndroid Build Coastguard Worker 	}
463*2d543d20SAndroid Build Coastguard Worker }
464*2d543d20SAndroid Build Coastguard Worker 
465*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_ibpkey_t **(semanage_ibpkey_t *temp=NULL) {
466*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
467*2d543d20SAndroid Build Coastguard Worker }
468*2d543d20SAndroid Build Coastguard Worker 
469*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_ibpkey_t ** {
470*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
471*2d543d20SAndroid Build Coastguard Worker }
472*2d543d20SAndroid Build Coastguard Worker 
473*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_ibpkey_key_t ** {
474*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
475*2d543d20SAndroid Build Coastguard Worker }
476*2d543d20SAndroid Build Coastguard Worker 
477*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_ibpkey_key_t **(semanage_ibpkey_key_t *temp=NULL) {
478*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
479*2d543d20SAndroid Build Coastguard Worker }
480*2d543d20SAndroid Build Coastguard Worker 
481*2d543d20SAndroid Build Coastguard Worker /** ibendport typemaps **/
482*2d543d20SAndroid Build Coastguard Worker 
483*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions
484*2d543d20SAndroid Build Coastguard Worker    will not take the semanage_ibendport_t *** parameter */
485*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_ibendport_t ***(semanage_ibendport_t **temp=NULL) {
486*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
487*2d543d20SAndroid Build Coastguard Worker }
488*2d543d20SAndroid Build Coastguard Worker 
489*2d543d20SAndroid Build Coastguard Worker %typemap(argout) (
490*2d543d20SAndroid Build Coastguard Worker 	semanage_handle_t* handle,
491*2d543d20SAndroid Build Coastguard Worker 	semanage_ibendport_t*** records,
492*2d543d20SAndroid Build Coastguard Worker 	unsigned int* count) {
493*2d543d20SAndroid Build Coastguard Worker 
494*2d543d20SAndroid Build Coastguard Worker 	if ($result) {
495*2d543d20SAndroid Build Coastguard Worker 		int value;
496*2d543d20SAndroid Build Coastguard Worker 		SWIG_AsVal_int($result, &value);
497*2d543d20SAndroid Build Coastguard Worker 		if (value >= 0) {
498*2d543d20SAndroid Build Coastguard Worker 			PyObject* plist = NULL;
499*2d543d20SAndroid Build Coastguard Worker 			if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_ibendport,
500*2d543d20SAndroid Build Coastguard Worker 				(void (*) (void*)) &semanage_ibendport_free, &plist) < 0)
501*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_From_int(STATUS_ERR);
502*2d543d20SAndroid Build Coastguard Worker 			else
503*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_AppendOutput($result, plist);
504*2d543d20SAndroid Build Coastguard Worker 		}
505*2d543d20SAndroid Build Coastguard Worker 	}
506*2d543d20SAndroid Build Coastguard Worker }
507*2d543d20SAndroid Build Coastguard Worker 
508*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_ibendport_t **(semanage_ibendport_t *temp=NULL) {
509*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
510*2d543d20SAndroid Build Coastguard Worker }
511*2d543d20SAndroid Build Coastguard Worker 
512*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_ibendport_t ** {
513*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
514*2d543d20SAndroid Build Coastguard Worker }
515*2d543d20SAndroid Build Coastguard Worker 
516*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_ibendport_key_t ** {
517*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
518*2d543d20SAndroid Build Coastguard Worker }
519*2d543d20SAndroid Build Coastguard Worker 
520*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_ibendport_key_t **(semanage_ibendport_key_t *temp=NULL) {
521*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
522*2d543d20SAndroid Build Coastguard Worker }
523*2d543d20SAndroid Build Coastguard Worker 
524*2d543d20SAndroid Build Coastguard Worker /** node typemaps **/
525*2d543d20SAndroid Build Coastguard Worker 
526*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions
527*2d543d20SAndroid Build Coastguard Worker    will not take the semanage_node_t *** parameter */
528*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_node_t ***(semanage_node_t **temp=NULL) {
529*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
530*2d543d20SAndroid Build Coastguard Worker }
531*2d543d20SAndroid Build Coastguard Worker 
532*2d543d20SAndroid Build Coastguard Worker %typemap(argout) (
533*2d543d20SAndroid Build Coastguard Worker  	semanage_handle_t* handle,
534*2d543d20SAndroid Build Coastguard Worker 	semanage_node_t*** records,
535*2d543d20SAndroid Build Coastguard Worker 	unsigned int* count) {
536*2d543d20SAndroid Build Coastguard Worker 
537*2d543d20SAndroid Build Coastguard Worker 	if ($result) {
538*2d543d20SAndroid Build Coastguard Worker 		int value;
539*2d543d20SAndroid Build Coastguard Worker 		SWIG_AsVal_int($result, &value);
540*2d543d20SAndroid Build Coastguard Worker 		if (value >= 0) {
541*2d543d20SAndroid Build Coastguard Worker 			PyObject* plist = NULL;
542*2d543d20SAndroid Build Coastguard Worker 			if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_node,
543*2d543d20SAndroid Build Coastguard Worker 				(void (*) (void*)) &semanage_node_free, &plist) < 0)
544*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_From_int(STATUS_ERR);
545*2d543d20SAndroid Build Coastguard Worker 			else
546*2d543d20SAndroid Build Coastguard Worker 				$result = SWIG_AppendOutput($result, plist);
547*2d543d20SAndroid Build Coastguard Worker 		}
548*2d543d20SAndroid Build Coastguard Worker 	}
549*2d543d20SAndroid Build Coastguard Worker }
550*2d543d20SAndroid Build Coastguard Worker 
551*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_node_t **(semanage_node_t *temp=NULL) {
552*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
553*2d543d20SAndroid Build Coastguard Worker }
554*2d543d20SAndroid Build Coastguard Worker 
555*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_node_t ** {
556*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
557*2d543d20SAndroid Build Coastguard Worker }
558*2d543d20SAndroid Build Coastguard Worker 
559*2d543d20SAndroid Build Coastguard Worker 
560*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_node_key_t ** {
561*2d543d20SAndroid Build Coastguard Worker 	$result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
562*2d543d20SAndroid Build Coastguard Worker }
563*2d543d20SAndroid Build Coastguard Worker 
564*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_node_key_t **(semanage_node_key_t *temp=NULL) {
565*2d543d20SAndroid Build Coastguard Worker 	$1 = &temp;
566*2d543d20SAndroid Build Coastguard Worker }
567*2d543d20SAndroid Build Coastguard Worker 
568*2d543d20SAndroid Build Coastguard Worker %include "semanageswig_python_exception.i"
569*2d543d20SAndroid Build Coastguard Worker %include "semanageswig.i"
570