[go: up one dir, main page]

File: argcargv.i

package info (click to toggle)
swig 4.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 46,232 kB
  • sloc: cpp: 54,631; ansic: 29,122; java: 17,530; python: 12,505; cs: 10,369; ruby: 7,232; yacc: 6,477; makefile: 5,965; javascript: 5,520; sh: 5,415; perl: 4,187; php: 3,693; ml: 2,187; lisp: 2,056; tcl: 1,991; xml: 115
file content (76 lines) | stat: -rw-r--r-- 2,815 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/* -------------------------------------------------------------
 * 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);
%}