10 #define TKUTIL_RELEASE_DATE "2010-03-26"
26 #if !defined(RHASH_TBL)
27 #define RHASH_TBL(h) (RHASH(h)->tbl)
29 #if !defined(RSTRING_PTR)
30 #define RSTRING_PTR(s) (RSTRING(s)->ptr)
31 #define RSTRING_LEN(s) (RSTRING(s)->len)
33 #if !defined(RARRAY_PTR)
34 #define RARRAY_PTR(s) (RARRAY(s)->ptr)
35 #define RARRAY_LEN(s) (RARRAY(s)->len)
38 #if defined(HAVE_STRNDUP) && !defined(_GNU_SOURCE)
39 extern char *strndup(
const char* _ptr,
size_t _len);
79 #if defined(HAVE_RB_OBJ_INSTANCE_EXEC) && !defined(RUBY_VM)
91 #ifndef HAVE_RB_OBJ_INSTANCE_EXEC
123 #ifdef HAVE_RB_OBJ_TAINT
126 #ifdef HAVE_RB_OBJ_UNTRUST
139 volatile VALUE cmd, rest;
169 volatile VALUE id_num;
205 size_t head_len =
strlen(cmd_id_head);
206 size_t prefix_len =
strlen(cmd_id_prefix);
209 if (strncmp(cmd_id_head,
RSTRING_PTR(cmd_id), head_len) != 0) {
212 if (strncmp(cmd_id_prefix,
213 RSTRING_PTR(cmd_id) + head_len, prefix_len) != 0) {
252 fromUTF8_toDefaultEnc(str,
self)
280 if (
NIL_P(keys))
return new_keys;
300 long idx, idx2,
size, size2;
304 volatile VALUE sys_enc, dst_enc, str_enc;
307 if (
NIL_P(sys_enc)) {
312 if (
NIL_P(enc_flag)) {
334 for(idx = 0; idx < RARRAY_LEN(ary); idx++) {
339 str_val =
ary2list(val, enc_flag,
self);
344 if (!
NIL_P(str_enc)) {
359 if (
RTEST(enc_flag)) {
364 size2 = RARRAY_LEN(val);
365 for(idx2 = 0; idx2 < size2; idx2++) {
369 str_val =
ary2list(val2, enc_flag,
self);
374 if (
RTEST(enc_flag)) {
391 if (!
NIL_P(str_enc)) {
411 if (!
NIL_P(str_enc)) {
426 for(idx = 0; idx < RARRAY_LEN(dst); idx++) {
458 volatile VALUE sys_enc, dst_enc, str_enc;
461 if (
NIL_P(sys_enc)) {
466 if (
NIL_P(enc_flag)) {
484 str_val =
ary2list(val, enc_flag,
self);
488 if (
RTEST(enc_flag)) {
501 if (!
NIL_P(str_val)) {
506 if (!
NIL_P(str_enc)) {
520 for(idx = 0; idx < RARRAY_LEN(dst); idx++) {
562 for(i = 0; i < len; i++) {
610 for(i = 0; i < len; i++) {
773 if (
RTEST(enc_flag)) {
780 if (
RTEST(enc_flag)) {
783 return hash2kv(hash, ary,
self);
820 if (
RTEST(enc_flag)) {
831 if (
RTEST(enc_flag)) {
839 #ifdef HAVE_RB_SYM_TO_S
847 if (
RTEST(enc_flag)) {
854 return ary2list(obj, enc_flag,
self);
911 volatile VALUE obj, enc_flag;
913 if (
rb_scan_args(argc, argv,
"11", &obj, &enc_flag) == 1) {
952 for(size = 0, idx = 2; idx <
argc; idx++) {
961 for(idx = 2; idx <
argc; idx++) {
963 if (
RTEST(argv[1])) {
968 }
else if (argv[idx] !=
TK_None) {
1044 "invalid value for Number: '%s'",
RSTRING_PTR(value));
1088 if (len > 1 && *ptr ==
'{' && *(ptr + len - 1) ==
'}') {
1135 #define CBSUBST_TBL_MAX (256)
1162 if (ptr->key[i] !=
NULL) {
1185 inf->
type[idx] =
'\0';
1221 if ( inf->
ivar[iv_idx] == (
ID) 0 )
continue;
1223 if (idx >= argc)
break;
1244 ID key_id, value_id;
1257 "includes invalid key(s). expected a String or a Symbol");
1260 switch(
TYPE(value)) {
1265 value_id =
SYM2ID(value);
1269 "includes invalid value(s). expected a String or a Symbol");
1323 if (inf->
ivar[idx] ==
id)
break;
1325 if (idx >= CBSUBST_TBL_MAX)
return sym;
1331 if (len = inf->
keylen[idx]) {
1333 strncpy(ptr, inf->
key[idx], len);
1337 *(ptr++) = (
unsigned char)idx;
1362 volatile VALUE arg_sym, ret;
1369 for(i = 0; i <
argc; i++) {
1370 switch(
TYPE(argv[i])) {
1390 if (inf->
ivar[idx] ==
id)
break;
1392 if (idx >= CBSUBST_TBL_MAX) {
1398 if (len = inf->
keylen[idx]) {
1400 strncpy(ptr, inf->
key[idx], len);
1404 *(ptr++) = (
unsigned char)idx;
1440 for(i = 0; i < len; i++) {
1444 if (*(key + 2) ==
'\0') {
1446 *(ptr++) = *(key + 1);
1451 if (inf->
keylen[idx] != keylen)
continue;
1452 if ((
unsigned char)inf->
key[idx][0] != (
unsigned char)*(key + 1))
continue;
1453 if (strncmp(inf->
key[idx], key + 1, keylen))
continue;
1456 if (idx < CBSUBST_TBL_MAX) {
1457 *(ptr++) = (
unsigned char)idx;
1479 char *keys_buf, *keys_ptr;
1491 if (inf->
ivar[idx] == (
ID) 0)
continue;
1493 *(keys_ptr++) = (
unsigned char)idx;
1497 if (len = inf->
keylen[idx]) {
1499 strncpy(ptr, inf->
key[idx], len);
1503 *(ptr++) = (
unsigned char)idx;
1526 volatile VALUE cbsubst_obj;
1527 volatile VALUE key_inf;
1528 volatile VALUE longkey_inf;
1529 volatile VALUE proc_inf;
1537 if (
rb_scan_args(argc, argv,
"21", &key_inf, &longkey_inf, &proc_inf) == 2) {
1538 proc_inf = longkey_inf;
1557 for(idx = 0; idx < len; idx++) {
1588 for(idx = 0; idx < len; idx++) {
1592 chr = (
unsigned char)(0x80 + idx);
1599 if (subst_inf->
key[chr]) {
1625 for(idx = 0; idx < len; idx++) {
1655 unsigned char *keyptr = (
unsigned char*)
RSTRING_PTR(arg_key);
1658 unsigned char type_chr;
1672 for(idx = 0; idx < vallen; idx++) {
1673 if (idx >= keylen) {
1675 }
else if (*(keyptr + idx) ==
' ') {
1678 if (type_chr = inf->
type[*(keyptr + idx)]) {