| /* |
| int PROG_ARGC |
| char **PROG_ARGV |
| |
| Some C function receive argc and argv from C main function. |
| This typemap provides ignore typemap which pass Ruby ARGV contents |
| as argc and argv to C function. |
| */ |
| |
| |
| |
| // argc and argv |
| %typemap(in,numinputs=0) int PROG_ARGC { |
| $1 = RARRAY_LEN(rb_argv) + 1; |
| } |
| |
| %typemap(in,numinputs=0) char **PROG_ARGV { |
| int i, n; |
| VALUE ary = rb_eval_string("[$0] + ARGV"); |
| n = RARRAY_LEN(ary); |
| $1 = (char **)malloc(n + 1); |
| for (i = 0; i < n; i++) { |
| VALUE v = rb_obj_as_string(RARRAY_PTR(ary)[i]); |
| $1[i] = (char *)malloc(RSTRING_LEN(v) + 1); |
| strcpy($1[i], RSTRING_PTR(v)); |
| } |
| } |
| |
| %typemap(freearg) char **PROG_ARGV { |
| int i, n = RARRAY_LEN(rb_argv) + 1; |
| for (i = 0; i < n; i++) free($1[i]); |
| free($1); |
| } |
| |