--- deliantra/Deliantra-Client/DC.pm 2006/09/20 16:01:07 1.120 +++ deliantra/Deliantra-Client/DC.pm 2006/09/29 00:56:05 1.121 @@ -14,6 +14,8 @@ package CFPlus; +use Carp (); + BEGIN { $VERSION = '0.52'; @@ -21,9 +23,17 @@ XSLoader::load "CFPlus", $VERSION; } +BEGIN { + $SIG{__DIE__} = sub { + return if CFPlus::in_destruct; + #CFPlus::fatal $_[0];#d# + CFPlus::error Carp::longmess $_[0];#d# + die;#d# + }; +} + use utf8; -use Carp (); use AnyEvent (); use BerkeleyDB; use Pod::POM (); @@ -131,6 +141,22 @@ } our $DB_ENV; +our $DB_STATE; + +sub db_table($) { + my ($table) = @_; + + $table =~ s/([^a-zA-Z0-9_\-])/sprintf "=%x=", ord $1/ge; + + new CFPlus::Database + -Env => $DB_ENV, + -Filename => $table, +# -Filename => "database", +# -Subname => $table, + -Property => DB_CHKSUM, + -Flags => DB_CREATE | DB_UPGRADE, + or die "unable to create/open database table $_[0]: $BerkeleyDB::Error" +} { use strict; @@ -149,21 +175,8 @@ -Flags => DB_CREATE | DB_RECOVER | DB_INIT_MPOOL | DB_INIT_LOCK | DB_INIT_TXN | $recover, -SetFlags => DB_AUTO_COMMIT | DB_LOG_AUTOREMOVE, or die "unable to create/open database home $Crossfire::VARDIR/cfplus: $BerkeleyDB::Error"; -} - -sub db_table($) { - my ($table) = @_; - - $table =~ s/([^a-zA-Z0-9_\-])/sprintf "=%x=", ord $1/ge; - new CFPlus::Database - -Env => $DB_ENV, - -Filename => $table, -# -Filename => "database", -# -Subname => $table, - -Property => DB_CHKSUM, - -Flags => DB_CREATE | DB_UPGRADE, - or die "unable to create/open database table $_[0]: $BerkeleyDB::Error" + $DB_STATE = db_table "state"; } package CFPlus::Layout;