You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
770 B
34 lines
770 B
/* |
|
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); |
|
} |
|
|
|
|