tags 427353 + patch thanks hi,
i think attached patch solves this issue, bye, - michael
diff -ruN orig/libdb4.2-ruby-0.5.8/src/common.c patch/libdb4.2-ruby-0.5.8/src/common.c --- orig/libdb4.2-ruby-0.5.8/src/common.c 2007-06-04 10:38:06.000000000 +0200 +++ patch/libdb4.2-ruby-0.5.8/src/common.c 2007-06-04 13:18:27.000000000 +0200 @@ -124,7 +124,7 @@ } key->data = StringValuePtr(tmp); key->flags &= ~DB_DBT_MALLOC; - key->size = RSTRING(tmp)->len + is_nil; + key->size = RSTRING_LEN(tmp) + is_nil; return tmp; } @@ -3791,7 +3791,11 @@ char *file, *database; VALUE flagv = Qnil, iov = Qnil; int flags = 0; +#if RUBY_VERSION_CODE >= 190 + rb_io_t *fptr; +#else OpenFile *fptr; +#endif FILE *io = NULL; rb_secure(4); diff -ruN orig/libdb4.2-ruby-0.5.8/src/env.c patch/libdb4.2-ruby-0.5.8/src/env.c --- orig/libdb4.2-ruby-0.5.8/src/env.c 2005-11-25 14:17:49.000000000 +0100 +++ patch/libdb4.2-ruby-0.5.8/src/env.c 2007-06-04 13:19:28.000000000 +0200 @@ -119,9 +119,9 @@ bv = rb_str_to_str(bv); MEMZERO(&control, DBT, 1); MEMZERO(&rec, DBT, 1); - control.size = RSTRING(av)->len; + control.size = RSTRING_LEN(av); control.data = StringValuePtr(av); - rec.size = RSTRING(bv)->len; + rec.size = RSTRING_LEN(bv); rec.data = StringValuePtr(bv); envid = NUM2INT(ev); #if BDB_VERSION >= 40200 @@ -159,7 +159,7 @@ if (!NIL_P(ident)) { ident = rb_str_to_str(ident); MEMZERO(&cdata, DBT, 1); - cdata.size = RSTRING(ident)->len; + cdata.size = RSTRING_LEN(ident); cdata.data = StringValuePtr(ident); } bdb_test_error(envst->envp->rep_start(envst->envp, @@ -523,7 +523,7 @@ { char *tmp; - tmp = ALLOCA_N(char, strlen("DB_DATA_DIR") + RSTRING(value)->len + 2); + tmp = ALLOCA_N(char, strlen("DB_DATA_DIR") + RSTRING_LEN(value) + 2); sprintf(tmp, "DB_DATA_DIR %s", StringValuePtr(value)); rb_ary_push(db_st->config, rb_str_new2(tmp)); } @@ -537,7 +537,7 @@ { char *tmp; - tmp = ALLOCA_N(char, strlen("DB_LOG_DIR") + RSTRING(value)->len + 2); + tmp = ALLOCA_N(char, strlen("DB_LOG_DIR") + RSTRING_LEN(value) + 2); sprintf(tmp, "DB_LOG_DIR %s", StringValuePtr(value)); rb_ary_push(db_st->config, rb_str_new2(tmp)); } @@ -551,7 +551,7 @@ { char *tmp; - tmp = ALLOCA_N(char, strlen("DB_TMP_DIR") + RSTRING(value)->len + 2); + tmp = ALLOCA_N(char, strlen("DB_TMP_DIR") + RSTRING_LEN(value) + 2); sprintf(tmp, "DB_TMP_DIR %s", StringValuePtr(value)); rb_ary_push(db_st->config, rb_str_new2(tmp)); } diff -ruN orig/libdb4.2-ruby-0.5.8/src/lock.c patch/libdb4.2-ruby-0.5.8/src/lock.c --- orig/libdb4.2-ruby-0.5.8/src/lock.c 2005-11-25 14:25:58.000000000 +0100 +++ patch/libdb4.2-ruby-0.5.8/src/lock.c 2007-06-04 13:19:58.000000000 +0200 @@ -266,7 +266,7 @@ SafeStringValue(a); MEMZERO(&objet, DBT, 1); objet.data = StringValuePtr(a); - objet.size = RSTRING(a)->len; + objet.size = RSTRING_LEN(a); lock_mode = NUM2INT(b); GetLockid(obj, lockid, envst); #if BDB_VERSION < 30000 @@ -340,7 +340,7 @@ list->obj = ALLOC(DBT); MEMZERO(list->obj, DBT, 1); list->obj->data = StringValuePtr(value); - list->obj->size = RSTRING(value)->len; + list->obj->size = RSTRING_LEN(value); } else if (strcmp(options, "mode") == 0) { list->mode = NUM2INT(value); diff -ruN orig/libdb4.2-ruby-0.5.8/src/log.c patch/libdb4.2-ruby-0.5.8/src/log.c --- orig/libdb4.2-ruby-0.5.8/src/log.c 2005-11-25 14:31:23.000000000 +0100 +++ patch/libdb4.2-ruby-0.5.8/src/log.c 2007-06-04 13:20:40.000000000 +0200 @@ -55,7 +55,7 @@ ret = bdb_makelsn(obj); Data_Get_Struct(ret, struct dblsnst, lsnst); data.data = StringValuePtr(a); - data.size = RSTRING(a)->len; + data.size = RSTRING_LEN(a); #if BDB_VERSION < 30000 if (!envst->envp->lg_info) { rb_raise(bdb_eFatal, "log region not open");