diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/tcltklib/tcltklib.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/ext/tcltklib/tcltklib.c b/ext/tcltklib/tcltklib.c index 5f90d25dfe..b63b1d06dd 100644 --- a/ext/tcltklib/tcltklib.c +++ b/ext/tcltklib/tcltklib.c @@ -184,6 +184,7 @@ ip_new(VALUE self) static VALUE ip_eval(VALUE self, VALUE str) { + char *s; char *buf; /* Tcl_Eval requires re-writable string region */ struct tcltkip *ptr; /* tcltkip data struct */ @@ -191,9 +192,9 @@ ip_eval(VALUE self, VALUE str) Data_Get_Struct(self, struct tcltkip, ptr); /* call Tcl_Eval() */ - Check_Type(str, T_STRING); - buf = ALLOCA_N(char,RSTRING(str)->len+1); - strcpy(buf, RSTRING(str)->ptr); + s = STR2CSTR(str); + buf = ALLOCA_N(char, strlen(s)+1); + strcpy(buf, s); DUMP2("Tcl_Eval(%s)", buf); ptr->return_value = Tcl_Eval(ptr->ip, buf); if (ptr->return_value == TCL_ERROR) { @@ -218,9 +219,10 @@ ip_invoke(int argc, VALUE *argv, VALUE obj) av = (char **)ALLOCA_N(char **, argc+1); for (i = 0; i < argc; ++i) { - Check_Type(argv[i], T_STRING); - av[i] = ALLOCA_N(char, RSTRING(argv[i])->len+1); - strcpy(av[i], RSTRING(argv[i])->ptr); + char *s = CTR2CSTR(argv[i]); + + av[i] = ALLOCA_N(char, strlen(s)+1); + strcpy(av[i], s); } av[argc] = NULL; |