psss / rpms / libselinux

Forked from rpms/libselinux 5 years ago
Clone
6a9919e
Index: libselinux/src/selinuxswig_python.i
6a9919e
===================================================================
6a9919e
--- libselinux/src/selinuxswig_python.i	(revision 2549)
6a9919e
+++ libselinux/src/selinuxswig_python.i	(working copy)
6a9919e
@@ -98,4 +98,41 @@
6a9919e
 	}
6a9919e
 }
6a9919e
 
6a9919e
+%typemap(in) char * const [] {
6a9919e
+	int i, size;
6a9919e
+	PyObject * s;
6a9919e
+
6a9919e
+	if (!PySequence_Check($input)) {
6a9919e
+		PyErr_SetString(PyExc_ValueError, "Expected a sequence");
6a9919e
+		return NULL;
6a9919e
+	}
6a9919e
+
6a9919e
+	size = PySequence_Size($input);
6a9919e
+	
6a9919e
+	$1 = (char**) malloc(size + 1);
6a9919e
+
6a9919e
+	for(i = 0; i < size; i++) {
6a9919e
+		if (!PyString_Check(PySequence_GetItem($input, i))) {
6a9919e
+			PyErr_SetString(PyExc_ValueError, "Sequence must contain only strings");
6a9919e
+			return NULL;
6a9919e
+		}
6a9919e
+	}
6a9919e
+		
6a9919e
+	for(i = 0; i < size; i++) {
6a9919e
+		s = PySequence_GetItem($input, i);
6a9919e
+		$1[i] = (char*) malloc(PyString_Size(s) + 1);
6a9919e
+		strcpy($1[i], PyString_AsString(s));
6a9919e
+	}
6a9919e
+	$1[size] = NULL;
6a9919e
+}
6a9919e
+
6a9919e
+%typemap(freearg,match="in") char * const [] {
6a9919e
+	int i = 0;
6a9919e
+	while($1[i]) {
6a9919e
+		free($1[i]);
6a9919e
+		i++;
6a9919e
+	}
6a9919e
+	free($1);
6a9919e
+}
6a9919e
+
6a9919e
 %include "selinuxswig.i"