From: Ivan Gyurdiev <ivg2@cornell.edu>
To: SELinux List <SELinux@tycho.nsa.gov>
Cc: Stephen Smalley <sds@tycho.nsa.gov>,
Joshua Brindle <jbrindle@tresys.com>
Subject: Move python bindings into semanageswig_python.i
Date: Tue, 14 Feb 2006 07:08:44 -0500 [thread overview]
Message-ID: <43F1C84C.5030800@cornell.edu> (raw)
In-Reply-To: <43F1B827.401@cornell.edu>
[-- Attachment #1: Type: text/plain, Size: 1052 bytes --]
Ivan Gyurdiev wrote:
> Attached is a resync of this patch against current genhomedircon.
Now move python stuff into semanageswig_python.i. Trim #include list to
semanage/semanage.h, which is sufficient. Actually, I doubt that's
needed at all, since swig seems to prototype all wrapped functions itself.
I define "python stuff" as any typemaps, which are overriding the normal
SWIG-generated output with custom code - things that re-direct pointers
to output, as well as list-to-array conversions. There should be no need
to override swig in the language independent .i file. Also move the lone
char_by_idx function. Other by_idx functions should be kept out, because
they might not be needed in other languages. In fact, I should look at
char_by_idx too, it's probably not needed.
Patch requires resync-ed pylist patch above, as well as the small
free-leak patch I sent earlier.
It doesn't attempt to make the Makefile language independent - it just
renames the current .i file being used (it's already hardcoded to use
-python anyways).
[-- Attachment #2: libsemanage.split_swig.diff --]
[-- Type: text/x-patch, Size: 22443 bytes --]
diff -Naurp --exclude-from excludes old/libsemanage/src/Makefile new/libsemanage/src/Makefile
--- old/libsemanage/src/Makefile 2006-01-27 10:00:53.000000000 -0500
+++ new/libsemanage/src/Makefile 2006-02-14 06:52:03.000000000 -0500
@@ -23,7 +23,7 @@ LIBVERSION = 1
LIBA=libsemanage.a
TARGET=libsemanage.so
-SWIGIF= semanageswig.i
+SWIGIF= semanageswig_python.i
SWIGCOUT= semanageswig_wrap.c
SWIGLOBJ:= $(patsubst %.c,%.lo,$(SWIGCOUT))
SWIGSO=_semanage.so
diff -Naurp --exclude-from excludes old/libsemanage/src/semanageswig.i new/libsemanage/src/semanageswig.i
--- old/libsemanage/src/semanageswig.i 2006-02-14 06:48:05.000000000 -0500
+++ new/libsemanage/src/semanageswig.i 2006-02-14 06:56:05.000000000 -0500
@@ -1,6 +1,7 @@
/* Author: Spencer Shimko <sshimko@tresys.com>
*
* Copyright (C) 2004-2005 Tresys Technology, LLC
+ * Copyright (C) 2006 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -20,381 +21,9 @@
%module semanage
%{
- #include "semanage/debug.h"
- #include "semanage/handle.h"
- #include "semanage/modules.h"
- #include "semanage/context_record.h"
- #include "semanage/boolean_record.h"
- #include "semanage/booleans_policy.h"
- #include "semanage/booleans_local.h"
- #include "semanage/booleans_active.h"
- #include "semanage/iface_record.h"
- #include "semanage/node_record.h"
- #include "semanage/interfaces_local.h"
- #include "semanage/interfaces_policy.h"
- #include "semanage/user_record.h"
- #include "semanage/users_local.h"
- #include "semanage/users_policy.h"
- #include "semanage/port_record.h"
- #include "semanage/ports_local.h"
- #include "semanage/ports_policy.h"
- #include "semanage/seuser_record.h"
- #include "semanage/fcontext_record.h"
- #include "semanage/fcontexts_local.h"
- #include "semanage/fcontexts_policy.h"
- #include "semanage/seusers_local.h"
- #include "semanage/seusers_policy.h"
- #include "semanage/nodes_local.h"
- #include "semanage/nodes_policy.h"
#include "semanage/semanage.h"
%}
-%inline {
- char *char_by_idx(char **list, int n) {
- return list[n];
- }
-}
-
-
-/** standard typemaps **/
-
-/* a few helpful typemaps are available in this library */
-%include <typemaps.i>
-/* wrap all int*'s so they can be used for results
- if it becomes necessary to send in data this should be changed to INOUT */
-%apply int *OUTPUT { int * };
-%apply int *OUTPUT { size_t * };
-%apply int *OUTPUT { unsigned int * };
-
-%typemap(in, numinputs=0) char **(char *temp) {
- $1 = &temp;
-}
-
-%typemap(argout) char** {
- $result = t_output_helper($result, SWIG_FromCharPtr(*$1));
- free(*$1);
-}
-
-%typemap(in, numinputs=0) char ***(char **temp) {
- $1 = &temp;
-}
-
-%typemap(argout) char*** {
- $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_p_char, 0));
-}
-
-/** module typemaps**/
-
-/* the wrapper will setup this parameter for passing... the resulting python functions
- will not take the semanage_module_info_t ** parameter */
-%typemap(in, numinputs=0) semanage_module_info_t **(semanage_module_info_t *temp) {
- $1 = &temp;
-}
-
-%typemap(argout) semanage_module_info_t ** {
- $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_module_info, 0));
-}
-
-/** context typemaps **/
-
-/* the wrapper will setup this parameter for passing... the resulting python functions
- will not take the semanage_context_t ** parameter */
-%typemap(in, numinputs=0) semanage_context_t **(semanage_context_t *temp) {
- $1 = &temp;
-}
-
-%typemap(argout) semanage_context_t** {
- $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_context, 0));
-}
-
-/** boolean typemaps **/
-
-/* the wrapper will setup this parameter for passing... the resulting python functions
- will not take the semanage_bool_t *** parameter */
-%typemap(in, numinputs=0) semanage_bool_t ***(semanage_bool_t **temp) {
- $1 = &temp;
-}
-
-%typemap(argout) (
- semanage_handle_t* handle,
- semanage_bool_t*** records,
- unsigned int* count) {
-
- if (result >= 0) {
- PyObject* plist = PyList_New(*$3);
- unsigned int i;
-
- for (i = 0; i < *$3; i++)
- PyList_SetItem(plist, i, SWIG_NewPointerObj((*$2)[i], SWIGTYPE_p_semanage_bool, 0));
-
- $result = t_output_helper($result, plist);
- free(*$2);
- }
-}
-
-%typemap(in, numinputs=0) semanage_bool_t **(semanage_bool_t *temp) {
- $1 = &temp;
-}
-
-%typemap(argout) semanage_bool_t ** {
- $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_bool, 0));
-}
-
-%typemap(argout) semanage_bool_key_t ** {
- $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_bool_key, 0));
-}
-
-%typemap(in, numinputs=0) semanage_bool_key_t **(semanage_bool_key_t *temp) {
- $1 = &temp;
-}
-
-/** fcontext typemaps **/
-
-/* the wrapper will setup this parameter for passing... the resulting python functions
- will not take the semanage_fcontext_t *** parameter */
-%typemap(in, numinputs=0) semanage_fcontext_t ***(semanage_fcontext_t **temp) {
- $1 = &temp;
-}
-
-%typemap(argout) (
- semanage_handle_t* handle,
- semanage_fcontext_t*** records,
- unsigned int* count) {
-
- if (result >= 0) {
- PyObject* plist = PyList_New(*$3);
- unsigned int i;
-
- for (i = 0; i < *$3; i++)
- PyList_SetItem(plist, i, SWIG_NewPointerObj((*$2)[i], SWIGTYPE_p_semanage_fcontext, 0));
-
- $result = t_output_helper($result, plist);
- free(*$2);
- }
-}
-
-%typemap(in, numinputs=0) semanage_fcontext_t **(semanage_fcontext_t *temp) {
- $1 = &temp;
-}
-
-%typemap(argout) semanage_fcontext_t ** {
- $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_fcontext, 0));
-}
-
-%typemap(argout) semanage_fcontext_key_t ** {
- $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_fcontext_key, 0));
-}
-
-%typemap(in, numinputs=0) semanage_fcontext_key_t **(semanage_fcontext_key_t *temp) {
- $1 = &temp;
-}
-
-/** interface typemaps **/
-
-/* the wrapper will setup this parameter for passing... the resulting python functions
- will not take the semanage_iface_t *** parameter */
-%typemap(in, numinputs=0) semanage_iface_t ***(semanage_iface_t **temp) {
- $1 = &temp;
-}
-
-%typemap(argout) (
- semanage_handle_t* handle,
- semanage_iface_t*** records,
- unsigned int* count) {
-
- if (result >= 0) {
- PyObject* plist = PyList_New(*$3);
- unsigned int i;
-
- for (i = 0; i < *$3; i++)
- PyList_SetItem(plist, i, SWIG_NewPointerObj((*$2)[i], SWIGTYPE_p_semanage_iface, 0));
-
- $result = t_output_helper($result, plist);
- free(*$2);
- }
-}
-
-%typemap(in, numinputs=0) semanage_iface_t **(semanage_iface_t *temp) {
- $1 = &temp;
-}
-
-%typemap(argout) semanage_iface_t ** {
- $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_iface, 0));
-}
-
-%typemap(argout) semanage_iface_key_t ** {
- $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_iface_key, 0));
-}
-
-%typemap(in, numinputs=0) semanage_iface_key_t **(semanage_iface_key_t *temp) {
- $1 = &temp;
-}
-
-/** seuser typemaps **/
-
-/* the wrapper will setup this parameter for passing... the resulting python functions
- will not take the semanage_seuser_t *** parameter */
-%typemap(in, numinputs=0) semanage_seuser_t ***(semanage_seuser_t **temp) {
- $1 = &temp;
-}
-
-%typemap(argout) (
- semanage_handle_t* handle,
- semanage_seuser_t*** records,
- unsigned int* count) {
-
- if (result >= 0) {
- PyObject* plist = PyList_New(*$3);
- unsigned int i;
-
- for (i = 0; i < *$3; i++)
- PyList_SetItem(plist, i, SWIG_NewPointerObj((*$2)[i], SWIGTYPE_p_semanage_seuser, 0));
-
- $result = t_output_helper($result, plist);
- free(*$2);
- }
-}
-
-%typemap(in, numinputs=0) semanage_seuser_t **(semanage_seuser_t *temp) {
- $1 = &temp;
-}
-
-%typemap(argout) semanage_seuser_t ** {
- $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_seuser, 0));
-}
-
-%typemap(argout) semanage_seuser_key_t ** {
- $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_seuser_key, 0));
-}
-
-%typemap(in, numinputs=0) semanage_seuser_key_t **(semanage_seuser_key_t *temp) {
- $1 = &temp;
-}
-
-/** user typemaps **/
-
-/* the wrapper will setup this parameter for passing... the resulting python functions
- will not take the semanage_user_t *** parameter */
-%typemap(in, numinputs=0) semanage_user_t ***(semanage_user_t **temp) {
- $1 = &temp;
-}
-
-%typemap(argout) (
- semanage_handle_t* handle,
- semanage_user_t*** records,
- unsigned int* count) {
-
- if (result >= 0) {
- PyObject* plist = PyList_New(*$3);
- unsigned int i;
-
- for (i = 0; i < *$3; i++)
- PyList_SetItem(plist, i, SWIG_NewPointerObj((*$2)[i], SWIGTYPE_p_semanage_user, 0));
-
- $result = t_output_helper($result, plist);
- free(*$2);
- }
-}
-
-%typemap(in, numinputs=0) semanage_user_t **(semanage_user_t *temp) {
- $1 = &temp;
-}
-
-%typemap(argout) semanage_user_t ** {
- $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_user, 0));
-}
-
-%typemap(argout) semanage_user_key_t ** {
- $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_user_key, 0));
-}
-
-%typemap(in, numinputs=0) semanage_user_key_t **(semanage_user_key_t *temp) {
- $1 = &temp;
-}
-
-/** port typemaps **/
-
-/* the wrapper will setup this parameter for passing... the resulting python functions
- will not take the semanage_port_t *** parameter */
-%typemap(in, numinputs=0) semanage_port_t ***(semanage_port_t **temp) {
- $1 = &temp;
-}
-
-%typemap(argout) (
- semanage_handle_t* handle,
- semanage_port_t*** records,
- unsigned int* count) {
-
- if (result >= 0) {
- PyObject* plist = PyList_New(*$3);
- unsigned int i;
-
- for (i = 0; i < *$3; i++)
- PyList_SetItem(plist, i, SWIG_NewPointerObj((*$2)[i], SWIGTYPE_p_semanage_port, 0));
-
- $result = t_output_helper($result, plist);
- free(*$2);
- }
-}
-
-%typemap(in, numinputs=0) semanage_port_t **(semanage_port_t *temp) {
- $1 = &temp;
-}
-
-%typemap(argout) semanage_port_t ** {
- $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_port, 0));
-}
-
-%typemap(argout) semanage_port_key_t ** {
- $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_port_key, 0));
-}
-
-%typemap(in, numinputs=0) semanage_port_key_t **(semanage_port_key_t *temp) {
- $1 = &temp;
-}
-
-/** node typemaps **/
-
-/* the wrapper will setup this parameter for passing... the resulting python functions
- will not take the semanage_node_t *** parameter */
-%typemap(in, numinputs=0) semanage_node_t ***(semanage_node_t **temp) {
- $1 = &temp;
-}
-
-%typemap(argout) (
- semanage_handle_t* handle,
- semanage_node_t*** records,
- unsigned int* count) {
-
- if (result >= 0) {
- PyObject* plist = PyList_New(*$3);
- unsigned int i;
-
- for (i = 0; i < *$3; i++)
- PyList_SetItem(plist, i, SWIG_NewPointerObj((*$2)[i], SWIGTYPE_p_semanage_node, 0));
-
- $result = t_output_helper($result, plist);
- free(*$2);
- }
-}
-
-%typemap(in, numinputs=0) semanage_node_t **(semanage_node_t *temp) {
- $1 = &temp;
-}
-
-%typemap(argout) semanage_node_t ** {
- $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_node, 0));
-}
-
-
-%typemap(argout) semanage_node_key_t ** {
- $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_node_key, 0));
-}
-
-%typemap(in, numinputs=0) semanage_node_key_t **(semanage_node_key_t *temp) {
- $1 = &temp;
-}
-
/* pull in the headers */
%include "../include/semanage/debug.h"
%include "../include/semanage/handle.h"
diff -Naurp --exclude-from excludes old/libsemanage/src/semanageswig_python.i new/libsemanage/src/semanageswig_python.i
--- old/libsemanage/src/semanageswig_python.i 1969-12-31 19:00:00.000000000 -0500
+++ new/libsemanage/src/semanageswig_python.i 2006-02-14 06:56:10.000000000 -0500
@@ -0,0 +1,366 @@
+/* Author: Spencer Shimko <sshimko@tresys.com>
+ *
+ * Copyright (C) 2004-2005 Tresys Technology, LLC
+ * Copyright (C) 2006 Red Hat, Inc
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/** standard typemaps **/
+
+/* a few helpful typemaps are available in this library */
+%include <typemaps.i>
+/* wrap all int*'s so they can be used for results
+ if it becomes necessary to send in data this should be changed to INOUT */
+%apply int *OUTPUT { int * };
+%apply int *OUTPUT { size_t * };
+%apply int *OUTPUT { unsigned int * };
+
+%inline {
+ char *char_by_idx(char **list, int n) {
+ return list[n];
+ }
+}
+
+%typemap(in, numinputs=0) char **(char *temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) char** {
+ $result = t_output_helper($result, SWIG_FromCharPtr(*$1));
+ free(*$1);
+}
+
+%typemap(in, numinputs=0) char ***(char **temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) char*** {
+ $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_p_char, 0));
+}
+
+/** module typemaps**/
+
+/* the wrapper will setup this parameter for passing... the resulting python functions
+ will not take the semanage_module_info_t ** parameter */
+%typemap(in, numinputs=0) semanage_module_info_t **(semanage_module_info_t *temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) semanage_module_info_t ** {
+ $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_module_info, 0));
+}
+
+/** context typemaps **/
+
+/* the wrapper will setup this parameter for passing... the resulting python functions
+ will not take the semanage_context_t ** parameter */
+%typemap(in, numinputs=0) semanage_context_t **(semanage_context_t *temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) semanage_context_t** {
+ $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_context, 0));
+}
+
+/** boolean typemaps **/
+
+/* the wrapper will setup this parameter for passing... the resulting python functions
+ will not take the semanage_bool_t *** parameter */
+%typemap(in, numinputs=0) semanage_bool_t ***(semanage_bool_t **temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) (
+ semanage_handle_t* handle,
+ semanage_bool_t*** records,
+ unsigned int* count) {
+
+ if (result >= 0) {
+ PyObject* plist = PyList_New(*$3);
+ unsigned int i;
+
+ for (i = 0; i < *$3; i++)
+ PyList_SetItem(plist, i, SWIG_NewPointerObj((*$2)[i], SWIGTYPE_p_semanage_bool, 0));
+
+ $result = t_output_helper($result, plist);
+ free(*$2);
+ }
+}
+
+%typemap(in, numinputs=0) semanage_bool_t **(semanage_bool_t *temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) semanage_bool_t ** {
+ $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_bool, 0));
+}
+
+%typemap(argout) semanage_bool_key_t ** {
+ $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_bool_key, 0));
+}
+
+%typemap(in, numinputs=0) semanage_bool_key_t **(semanage_bool_key_t *temp) {
+ $1 = &temp;
+}
+
+/** fcontext typemaps **/
+
+/* the wrapper will setup this parameter for passing... the resulting python functions
+ will not take the semanage_fcontext_t *** parameter */
+%typemap(in, numinputs=0) semanage_fcontext_t ***(semanage_fcontext_t **temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) (
+ semanage_handle_t* handle,
+ semanage_fcontext_t*** records,
+ unsigned int* count) {
+
+ if (result >= 0) {
+ PyObject* plist = PyList_New(*$3);
+ unsigned int i;
+
+ for (i = 0; i < *$3; i++)
+ PyList_SetItem(plist, i, SWIG_NewPointerObj((*$2)[i], SWIGTYPE_p_semanage_fcontext, 0));
+
+ $result = t_output_helper($result, plist);
+ free(*$2);
+ }
+}
+
+%typemap(in, numinputs=0) semanage_fcontext_t **(semanage_fcontext_t *temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) semanage_fcontext_t ** {
+ $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_fcontext, 0));
+}
+
+%typemap(argout) semanage_fcontext_key_t ** {
+ $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_fcontext_key, 0));
+}
+
+%typemap(in, numinputs=0) semanage_fcontext_key_t **(semanage_fcontext_key_t *temp) {
+ $1 = &temp;
+}
+
+/** interface typemaps **/
+
+/* the wrapper will setup this parameter for passing... the resulting python functions
+ will not take the semanage_iface_t *** parameter */
+%typemap(in, numinputs=0) semanage_iface_t ***(semanage_iface_t **temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) (
+ semanage_handle_t* handle,
+ semanage_iface_t*** records,
+ unsigned int* count) {
+
+ if (result >= 0) {
+ PyObject* plist = PyList_New(*$3);
+ unsigned int i;
+
+ for (i = 0; i < *$3; i++)
+ PyList_SetItem(plist, i, SWIG_NewPointerObj((*$2)[i], SWIGTYPE_p_semanage_iface, 0));
+
+ $result = t_output_helper($result, plist);
+ free(*$2);
+ }
+}
+
+%typemap(in, numinputs=0) semanage_iface_t **(semanage_iface_t *temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) semanage_iface_t ** {
+ $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_iface, 0));
+}
+
+%typemap(argout) semanage_iface_key_t ** {
+ $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_iface_key, 0));
+}
+
+%typemap(in, numinputs=0) semanage_iface_key_t **(semanage_iface_key_t *temp) {
+ $1 = &temp;
+}
+
+/** seuser typemaps **/
+
+/* the wrapper will setup this parameter for passing... the resulting python functions
+ will not take the semanage_seuser_t *** parameter */
+%typemap(in, numinputs=0) semanage_seuser_t ***(semanage_seuser_t **temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) (
+ semanage_handle_t* handle,
+ semanage_seuser_t*** records,
+ unsigned int* count) {
+
+ if (result >= 0) {
+ PyObject* plist = PyList_New(*$3);
+ unsigned int i;
+
+ for (i = 0; i < *$3; i++)
+ PyList_SetItem(plist, i, SWIG_NewPointerObj((*$2)[i], SWIGTYPE_p_semanage_seuser, 0));
+
+ $result = t_output_helper($result, plist);
+ free(*$2);
+ }
+}
+
+%typemap(in, numinputs=0) semanage_seuser_t **(semanage_seuser_t *temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) semanage_seuser_t ** {
+ $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_seuser, 0));
+}
+
+%typemap(argout) semanage_seuser_key_t ** {
+ $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_seuser_key, 0));
+}
+
+%typemap(in, numinputs=0) semanage_seuser_key_t **(semanage_seuser_key_t *temp) {
+ $1 = &temp;
+}
+
+/** user typemaps **/
+
+/* the wrapper will setup this parameter for passing... the resulting python functions
+ will not take the semanage_user_t *** parameter */
+%typemap(in, numinputs=0) semanage_user_t ***(semanage_user_t **temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) (
+ semanage_handle_t* handle,
+ semanage_user_t*** records,
+ unsigned int* count) {
+
+ if (result >= 0) {
+ PyObject* plist = PyList_New(*$3);
+ unsigned int i;
+
+ for (i = 0; i < *$3; i++)
+ PyList_SetItem(plist, i, SWIG_NewPointerObj((*$2)[i], SWIGTYPE_p_semanage_user, 0));
+
+ $result = t_output_helper($result, plist);
+ free(*$2);
+ }
+}
+
+%typemap(in, numinputs=0) semanage_user_t **(semanage_user_t *temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) semanage_user_t ** {
+ $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_user, 0));
+}
+
+%typemap(argout) semanage_user_key_t ** {
+ $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_user_key, 0));
+}
+
+%typemap(in, numinputs=0) semanage_user_key_t **(semanage_user_key_t *temp) {
+ $1 = &temp;
+}
+
+/** port typemaps **/
+
+/* the wrapper will setup this parameter for passing... the resulting python functions
+ will not take the semanage_port_t *** parameter */
+%typemap(in, numinputs=0) semanage_port_t ***(semanage_port_t **temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) (
+ semanage_handle_t* handle,
+ semanage_port_t*** records,
+ unsigned int* count) {
+
+ if (result >= 0) {
+ PyObject* plist = PyList_New(*$3);
+ unsigned int i;
+
+ for (i = 0; i < *$3; i++)
+ PyList_SetItem(plist, i, SWIG_NewPointerObj((*$2)[i], SWIGTYPE_p_semanage_port, 0));
+
+ $result = t_output_helper($result, plist);
+ free(*$2);
+ }
+}
+
+%typemap(in, numinputs=0) semanage_port_t **(semanage_port_t *temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) semanage_port_t ** {
+ $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_port, 0));
+}
+
+%typemap(argout) semanage_port_key_t ** {
+ $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_port_key, 0));
+}
+
+%typemap(in, numinputs=0) semanage_port_key_t **(semanage_port_key_t *temp) {
+ $1 = &temp;
+}
+
+/** node typemaps **/
+
+/* the wrapper will setup this parameter for passing... the resulting python functions
+ will not take the semanage_node_t *** parameter */
+%typemap(in, numinputs=0) semanage_node_t ***(semanage_node_t **temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) (
+ semanage_handle_t* handle,
+ semanage_node_t*** records,
+ unsigned int* count) {
+
+ if (result >= 0) {
+ PyObject* plist = PyList_New(*$3);
+ unsigned int i;
+
+ for (i = 0; i < *$3; i++)
+ PyList_SetItem(plist, i, SWIG_NewPointerObj((*$2)[i], SWIGTYPE_p_semanage_node, 0));
+
+ $result = t_output_helper($result, plist);
+ free(*$2);
+ }
+}
+
+%typemap(in, numinputs=0) semanage_node_t **(semanage_node_t *temp) {
+ $1 = &temp;
+}
+
+%typemap(argout) semanage_node_t ** {
+ $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_node, 0));
+}
+
+
+%typemap(argout) semanage_node_key_t ** {
+ $result = t_output_helper($result, SWIG_NewPointerObj(*$1, SWIGTYPE_p_semanage_node_key, 0));
+}
+
+%typemap(in, numinputs=0) semanage_node_key_t **(semanage_node_key_t *temp) {
+ $1 = &temp;
+}
+
+%include "semanageswig.i"
next prev parent reply other threads:[~2006-02-14 12:08 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-02-02 20:45 [SEMANAGE][UTILS] Use PyList in bindings Ivan Gyurdiev
2006-02-02 21:16 ` Ivan Gyurdiev
2006-02-03 14:00 ` Stephen Smalley
2006-02-03 14:36 ` Joshua Brindle
2006-02-14 10:59 ` Ivan Gyurdiev
2006-02-14 12:08 ` Ivan Gyurdiev [this message]
2006-02-14 18:51 ` Improve bindings, add PyList(String) for roles array Ivan Gyurdiev
2006-02-14 20:12 ` Stephen Smalley
2006-02-14 19:01 ` Move python bindings into semanageswig_python.i Stephen Smalley
2006-02-14 18:57 ` [SEMANAGE][UTILS] Use PyList in bindings Stephen Smalley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=43F1C84C.5030800@cornell.edu \
--to=ivg2@cornell.edu \
--cc=SELinux@tycho.nsa.gov \
--cc=jbrindle@tresys.com \
--cc=sds@tycho.nsa.gov \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.