[Mew-dist 03483] MsgDB for Win95
Hideyuki SHIRAI
Shirai at example.com
1998年 1月 23日 (金) 15:53:30 JST
白井です。
UNIX上では水戸さんの『mew-summary-search-parent』や、
『imcat --join』を便利に使わせていただいているのですが、Win95上
ではMsgDBが動かないので、**とりあえず** 動かすpatchです。
1. SDBMにだけ対応しました。
2. Win-NT、OS2のことは知らないのですが、適当にみつくろいました。
勘違いしていたらごめんなさい。
3. crlfで保存されているメールにAnnotateすると、改行コードが元の
メール内で混在します。
で、なにが **とりあえず** かというと……
Win95のPerlにはflockがないため排他制御が出来ません。最初、
LockFileを作る方向で考えたのですが、im_link、im_unlink、
im_renameにどうしても対処出来なかったため、最終的には全く排他制御
をしていません。
しかし、相当実験をしましたが、一度もMsgDBファイルが壊れなかった
ため、めんどくさくなって考えるのを止めてしまいました。 (^^;;;
# まぁ、MsgDBファイルが壊れても、imhist --add で直せるからいいかな?
# 致命的じゃないしぃ、という軟弱な考えが…
というわけで、im-83へのpatchです。
実験してみてもらえるとうれしいです。
排他制御を考えていただけると、もっとうれしいです。(^^;
-------------- next part --------------
*** imput.in.orig Wed Jan 14 14:43:13 1998
--- imput.in Fri Jan 23 13:26:54 1998
***************
*** 1571,1576 ****
--- 1571,1578 ----
close(ORIGINAL);
return -1;
}
+ binmode(TMP) if(win95p() || os2p());
+ binmode(ORIGINAL) if(win95p() || os2p());
print TMP $first . $second;
my $checked = 0;
while (<ORIGINAL>) {
***************
*** 1613,1618 ****
--- 1615,1622 ----
unlink($tmp);
return -1;
}
+ binmode(TMP) if(win95p() || os2p());
+ binmode(ORIGINAL) if(win95p() || os2p());
my $size = -s ORIGINAL;
seek(ORIGINAL, 0, 2);
unless (print ORIGINAL $first . $second) {
***************
*** 1636,1641 ****
--- 1640,1647 ----
unlink($tmp);
return -1;
}
+ binmode(TMP) if(win95p() || os2p());
+ binmode(ORIGINAL) if(win95p() || os2p());
while (<TMP>) {
unless (print ORIGINAL $_) {
close(TMP);
-------------- next part --------------
*** History.pm.in.orig Wed Jan 14 14:43:19 1998
--- History.pm.in Fri Jan 23 12:31:46 1998
***************
*** 86,92 ****
} elsif ($DBtype eq 'NDBM') {
$db = tie %History, 'NDBM_File', $dbfile, O_CREAT|O_RDWR, &msg_mode(0);
} elsif ($DBtype eq 'SDBM') {
! $db = tie %History, 'SDBM_File', $dbfile, O_CREAT|O_RDWR, &msg_mode(0);
}
unless ($db) {
--- 86,96 ----
} elsif ($DBtype eq 'NDBM') {
$db = tie %History, 'NDBM_File', $dbfile, O_CREAT|O_RDWR, &msg_mode(0);
} elsif ($DBtype eq 'SDBM') {
! if (&win95p || &os2p){
! $db = tie %History, 'SDBM_File', $dbfile, O_CREAT|O_RDWR|O_BINARY, &msg_mode(0);
! } else {
! $db = tie %History, 'SDBM_File', $dbfile, O_CREAT|O_RDWR, &msg_mode(0);
! }
}
unless ($db) {
***************
*** 114,125 ****
return -1;
}
}
!
! unless (flock (HIST_FH, LOCK_EX | LOCK_NB)) {
! im_warn "history: waiting for write lock ($!)\n";
! unless (flock (HIST_FH, LOCK_EX)) {
! im_err "history: flock ($!)\n";
! return -1;
}
}
$locked = 1;
--- 118,130 ----
return -1;
}
}
! if (!(&win95p && !&wntp)){
! unless (flock (HIST_FH, LOCK_EX | LOCK_NB)) {
! im_warn "history: waiting for write lock ($!)\n";
! unless (flock (HIST_FH, LOCK_EX)) {
! im_err "history: flock ($!)\n";
! return -1;
! }
}
}
$locked = 1;
***************
*** 132,139 ****
im_err("no database specified.\n");
return;
}
! if ($locked) {
! flock(HIST_FH, LOCK_UN);
}
untie %History;
if ($locked) {
--- 137,146 ----
im_err("no database specified.\n");
return;
}
! if (!(&win95p && !&wntp)){
! if ($locked) {
! flock(HIST_FH, LOCK_UN);
! }
}
untie %History;
if ($locked) {
-------------- next part --------------
--
白井秀行 (H.Shirai)
Mew-dist メーリングリストの案内