/* ------------------------------------------------------------- * SWIG library containing argc and argv multi-argument typemaps * ------------------------------------------------------------- */ %typemap(cstype) (int ARGC, char **ARGV) "string[]" %typemap(imtype) (int ARGC, char **ARGV) "global::System.IntPtr" %typemap(ctype) (int ARGC, char **ARGV) "void*" %typemap(csin) (int ARGC, char **ARGV) "$modulePINVOKE.SWIG_csharp_string_array_to_c($csinput.Length, $csinput)" %pragma(csharp) imclasscode=%{ [global::System.Runtime.InteropServices.DllImport("$module", EntryPoint="SWIG_csharp_string_array_to_c")] public static extern global::System.IntPtr SWIG_csharp_string_array_to_c(int len, [global::System.Runtime.InteropServices.In,global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray, ArraySubType=global::System.Runtime.InteropServices.UnmanagedType.LPStr, SizeParamIndex=0)] string[] array); %} %fragment("SWIG_csharp_string_array", "header") %{ #ifdef __cplusplus extern "C" { #endif typedef struct { int len; char* array[1]; } SWIG_csharp_string_array; static void* SWIG_csharp_string_array_free(SWIG_csharp_string_array *arr) { if (arr != SWIG_NULLPTR) { int i; for(i = 0; i < arr->len; i++) { free(arr->array[i]); } free(arr); } return SWIG_NULLPTR; } SWIGEXPORT void* SWIGSTDCALL SWIG_csharp_string_array_to_c(int len, void *array) { int i; size_t alen, slen; char *p, **ptr; SWIG_csharp_string_array *ret; /* We don't need to add one to len for the terminating NULL here because * SWIG_csharp_string_array includes one element already. */ alen = sizeof(SWIG_csharp_string_array) + sizeof(char *) * len; ret = (SWIG_csharp_string_array *)malloc(alen); if (ret == SWIG_NULLPTR) { SWIG_CSharpSetPendingException(SWIG_CSharpOutOfMemoryException, "fail to duplicate array."); return SWIG_NULLPTR; } memset(ret, 0, alen); ret->len = len; ptr = (char **)array; for(i = 0; i < len; i++) { slen = strlen(ptr[i]) + 1; p = (char*)malloc(slen); if (p == SWIG_NULLPTR) { SWIG_CSharpSetPendingException(SWIG_CSharpOutOfMemoryException, "fail to alloc a string."); return SWIG_csharp_string_array_free(ret); } memcpy(p, ptr[i], slen); ret->array[i] = p; } ret->array[i] = SWIG_NULLPTR; return ret; } #ifdef __cplusplus } #endif %} %typemap(in, canthrow=1, fragment="SWIG_csharp_string_array") (int ARGC, char **ARGV) %{ SWIG_csharp_string_array *arr = (SWIG_csharp_string_array*)$input; if (arr != SWIG_NULLPTR) { $1 = ($1_ltype)arr->len; $2 = ($2_ltype)arr->array; } %} %typemap(freearg, fragment="SWIG_csharp_string_array") (int ARGC, char **ARGV) %{ SWIG_csharp_string_array_free((SWIG_csharp_string_array*)$input); %}