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.
35 lines
770 B
35 lines
770 B
5 years ago
|
/*
|
||
|
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);
|
||
|
}
|
||
|
|