ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/lib/cf.pm
(Generate patch)

Comparing deliantra/server/lib/cf.pm (file contents):
Revision 1.426 by root, Thu Apr 24 04:40:31 2008 UTC vs.
Revision 1.427 by root, Sat Apr 26 12:25:45 2008 UTC

1141 utf8::decode (my $decname = $filename); 1141 utf8::decode (my $decname = $filename);
1142 warn sprintf "saving %s (%d,%d)\n", 1142 warn sprintf "saving %s (%d,%d)\n",
1143 $decname, length $$rdata, scalar @$objs; 1143 $decname, length $$rdata, scalar @$objs;
1144 1144
1145 if (my $fh = aio_open "$filename~", O_WRONLY | O_CREAT, 0600) { 1145 if (my $fh = aio_open "$filename~", O_WRONLY | O_CREAT, 0600) {
1146 chmod SAVE_MODE, $fh; 1146 aio_chmod $fh, SAVE_MODE;
1147 aio_write $fh, 0, (length $$rdata), $$rdata, 0; 1147 aio_write $fh, 0, (length $$rdata), $$rdata, 0;
1148 aio_fsync $fh if $cf::USE_FSYNC; 1148 aio_fsync $fh if $cf::USE_FSYNC;
1149 close $fh; 1149 aio_close $fh;
1150 1150
1151 if (@$objs) { 1151 if (@$objs) {
1152 if (my $fh = aio_open "$filename.pst~", O_WRONLY | O_CREAT, 0600) { 1152 if (my $fh = aio_open "$filename.pst~", O_WRONLY | O_CREAT, 0600) {
1153 chmod SAVE_MODE, $fh; 1153 aio_chmod $fh, SAVE_MODE;
1154 my $data = Coro::Storable::nfreeze { version => 1, objs => $objs }; 1154 my $data = Coro::Storable::nfreeze { version => 1, objs => $objs };
1155 aio_write $fh, 0, (length $data), $data, 0; 1155 aio_write $fh, 0, (length $data), $data, 0;
1156 aio_fsync $fh if $cf::USE_FSYNC; 1156 aio_fsync $fh if $cf::USE_FSYNC;
1157 close $fh; 1157 aio_close $fh;
1158 aio_rename "$filename.pst~", "$filename.pst"; 1158 aio_rename "$filename.pst~", "$filename.pst";
1159 } 1159 }
1160 } else { 1160 } else {
1161 aio_unlink "$filename.pst"; 1161 aio_unlink "$filename.pst";
1162 } 1162 }
1456 my $f = new_from_file cf::object::thawer path $login 1456 my $f = new_from_file cf::object::thawer path $login
1457 or return; 1457 or return;
1458 1458
1459 my $pl = cf::player::load_pl $f 1459 my $pl = cf::player::load_pl $f
1460 or return; 1460 or return;
1461
1461 local $cf::PLAYER_LOADING{$login} = $pl; 1462 local $cf::PLAYER_LOADING{$login} = $pl;
1462 $f->resolve_delayed_derefs; 1463 $f->resolve_delayed_derefs;
1463 $cf::PLAYER{$login} = $pl 1464 $cf::PLAYER{$login} = $pl
1464 } 1465 }
1465 } 1466 }
1570 1571
1571 for my $login (@$dirs) { 1572 for my $login (@$dirs) {
1572 my $path = path $login; 1573 my $path = path $login;
1573 1574
1574 # a .pst is a dead give-away for a valid player 1575 # a .pst is a dead give-away for a valid player
1575 unless (-e "$path.pst") { 1576 # if no pst file found, open and chekc for blocked users
1577 if (aio_stat "$path.pst") {
1576 my $fh = aio_open $path, Fcntl::O_RDONLY, 0 or next; 1578 my $fh = aio_open $path, Fcntl::O_RDONLY, 0 or next;
1577 aio_read $fh, 0, 512, my $buf, 0 or next; 1579 aio_read $fh, 0, 512, my $buf, 0 or next;
1578 $buf !~ /^password -------------$/m or next; # official not-valid tag 1580 $buf !~ /^password -------------$/m or next; # official not-valid tag
1579 } 1581 }
1580 1582

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines