1 /* 2 int PROG_ARGC 3 char **PROG_ARGV 4 5 Some C function receive argc and argv from C main function. 6 This typemap provides ignore typemap which pass Ruby ARGV contents 7 as argc and argv to C function. 8 */ 9 10 11 12 // argc and argv 13 %typemap(in,numinputs=0) int PROG_ARGC { 14 $1 = RARRAY_LEN(rb_argv) + 1; 15 } 16 17 %typemap(in,numinputs=0) char **PROG_ARGV { 18 int i, n; 19 VALUE ary = rb_eval_string("[$0] + ARGV"); 20 n = RARRAY_LEN(ary); 21 $1 = (char **)malloc(n + 1); 22 for (i = 0; i < n; i++) { 23 VALUE v = rb_obj_as_string(RARRAY_PTR(ary)[i]); 24 $1[i] = (char *)malloc(RSTRING_LEN(v) + 1); 25 strcpy($1[i], RSTRING_PTR(v)); 26 } 27 } 28 29 %typemap(freearg) char **PROG_ARGV { 30 int i, n = RARRAY_LEN(rb_argv) + 1; 31 for (i = 0; i < n; i++) free($1[i]); 32 free($1); 33 } 34 35