diff options
Diffstat (limited to 'img/lib/IM/LocalMbox.pm')
| -rw-r--r-- | img/lib/IM/LocalMbox.pm | 142 |
1 files changed, 80 insertions, 62 deletions
diff --git a/img/lib/IM/LocalMbox.pm b/img/lib/IM/LocalMbox.pm index 8a38fde1..1c27bbee 100644 --- a/img/lib/IM/LocalMbox.pm +++ b/img/lib/IM/LocalMbox.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Apr 14, 2000 +### Revised: Dec 7, 2002 ### -my $PM_VERSION = "IM::LocalMbox.pm version 20000414(IM141)"; +my $PM_VERSION = "IM::LocalMbox.pm version 20021207(IM142)"; package IM::LocalMbox; require 5.003; @@ -25,22 +25,6 @@ use vars qw(@ISA @EXPORT $getchk_hook); @ISA = qw(Exporter); @EXPORT = qw(local_get_msg); -=head1 NAME - -LocalMbox - local mailbox managing package - -=head1 SYNOPSIS - -$num_msgs = &local_get_msg(source_mailbox, destination_folder, access_mode); - -=head1 DESCRIPTION - -$mbox = 'local:/var/mail/motonori'; -$folder = '+inbox' -$num_msgs = &local_get_msg($mbox, $folder, 'get'); - -=cut - use vars qw($locked_by_file $locked_by_flock); ################################# # local mailbox access routines # @@ -51,10 +35,10 @@ use vars qw($locked_by_file $locked_by_flock); # local_get_msg(src, dst, how) # check, from, get # -sub local_get_msg ($$$$$) { - my ($src, $dst, $how, $lock_type, $noscan) = @_; - my ($need_lock, $qmail_ok, $msgs, $l, $file, $p); - my (@MailDrops); +sub local_get_msg($$$$$) { + my($src, $dst, $how, $lock_type, $noscan) = @_; + my($need_lock, $qmail_ok, $msgs, $l, $file, $p); + my(@MailDrops); if ($how eq 'get') { $need_lock = 1; @@ -89,7 +73,7 @@ sub local_get_msg ($$$$$) { push(@MailDrops, $ENV{'MAIL'}) if ($ENV{'MAIL'}); push(@MailDrops, "$home/Maildir"); foreach $p (@MailDrops) { - if (( -d $p && -d "$p/new" && -d "$p/cur") || -f $p ) { + if ((-d $p && -d "$p/new" && -d "$p/cur") || -f $p) { $mbox = $p; last; } @@ -104,7 +88,7 @@ sub local_get_msg ($$$$$) { ); unshift(@MailDrops, "$home/Mailbox") if ($qmail_ok); foreach $p (@MailDrops) { - if ( -f $p ) { + if (-f $p) { $mbox = $p; last; } @@ -221,7 +205,7 @@ sub local_get_msg ($$$$$) { } } - truncate (SAVE, tell(SAVE)); + truncate(SAVE, tell(SAVE)); unlink($tmpmbox); } else { if (($msgs = process_mbox($mbox, $dst, $how, '', $noscan)) < 0) { @@ -246,8 +230,8 @@ sub local_get_msg ($$$$$) { } } -sub local_copymbox ($$) { - my ($src, $dst) = @_; +sub local_copymbox($$) { + my($src, $dst) = @_; im_debug("copy from $src to $dst\n") if (&debug('local')); unless (im_open(\*SRC, "<$src")) { @@ -274,15 +258,15 @@ sub local_copymbox ($$) { return -1; } } - truncate (DST, -s SRC); - close (DST); - close (SRC); + truncate(DST, -s SRC); + close(DST); + close(SRC); return 0; } -sub process_maildir ($$$$) { - my ($maildir, $dst, $how, $noscan) = @_; - my ($msgs, $f, $dir); +sub process_maildir($$$$) { + my($maildir, $dst, $how, $noscan) = @_; + my($msgs, $f, $dir); unless (-d "$maildir/new" && -r "$maildir/new" && -x "$maildir/new" && -d "$maildir/cur" && -r "$maildir/cur" && -x "$maildir/cur") { @@ -317,10 +301,10 @@ sub process_maildir ($$$$) { return $msgs; } -sub process_file ($$$$) { - my ($mbox, $dst, $how, $noscan) = @_; - my ($format, $msgs, $rp, $length, $inheader, @Message); - local (*MBOX); +sub process_file($$$$) { + my($mbox, $dst, $how, $noscan) = @_; + my($format, $msgs, $rp, $length, $inheader, @Message); + local(*MBOX); im_notice("opening MBOX ($mbox)\n"); unless (im_open(\*MBOX, "<$mbox")) { @@ -331,8 +315,9 @@ sub process_file ($$$$) { push (@Message, $_); } if ($getchk_hook ne '') { - my $head = lcl_store_header(\@Message); - unless (eval { &getchk_sub($head); }) { + my %head; + lcl_store_header(\%head, \@Message); + unless (eval { &getchk_sub(\%head); }) { close(MBOX); return 1 } @@ -348,11 +333,11 @@ sub process_file ($$$$) { return 0; } -sub process_mbox ($$$$$) { - my ($mbox, $dst, $how, $save, $noscan) = @_; - my ($format, $msgs, $length, $inheader, @Message); - local (*MBOX); - my ($first_line, $FIRST_LINE); +sub process_mbox($$$$$) { + my($mbox, $dst, $how, $save, $noscan) = @_; + my($format, $msgs, $length, $inheader, @Message); + local(*MBOX); + my($first_line, $FIRST_LINE); im_info("Getting new messages from local mailbox into $dst....\n") if ($how eq 'get'); @@ -416,7 +401,7 @@ sub process_mbox ($$$$$) { && /^From / && $Message[$#Message] eq "\n") { chomp($first_line = $_); last; - } elsif ($format eq 'RMAIL' && /^\x1f/ ) { + } elsif ($format eq 'RMAIL' && /^\x1f/) { chomp($first_line = <MBOX>); last; } elsif ($inheader) { @@ -424,7 +409,7 @@ sub process_mbox ($$$$$) { print "$_" if (/^From:/i); } # XXX continuous line processing needed - push (@Message, $_) + push(@Message, $_) unless (/^Return-Path:/i && $main::opt_rpath eq 'replace'); # for Solaris 2.x or ... # XXX option @@ -433,13 +418,13 @@ sub process_mbox ($$$$$) { } $inheader = 0 if (/^\n$/); } else { - push (@Message, $_); + push(@Message, $_); $length -= length($_) if ($length > 0); } } if ($Message[$#Message] eq "\n") { - pop (@Message); + pop(@Message); } if ($getchk_hook) { @@ -475,8 +460,8 @@ sub process_mbox ($$$$$) { return $msgs; } -sub save_message ($$$$) { - my ($msg, $save, $mode, $fline) = @_; +sub save_message($$$$) { + my($msg, $save, $mode, $fline) = @_; im_debug("saving to $save\n") if (&debug('local')); if ($mode eq 'UNIX') { @@ -527,7 +512,7 @@ sub save_message ($$$$) { return 0; } -sub local_empty ($) { +sub local_empty($) { my $mbox = shift; unless (truncate($mbox, 0)) { unless (im_open(\*MBOX, ">$mbox")) { @@ -544,15 +529,15 @@ sub LOCK_EX { 2 } sub LOCK_NB { 4 } sub LOCK_UN { 8 } -sub local_lockmbox ($$) { - my ($base, $type) = @_; +sub local_lockmbox($$) { + my($base, $type) = @_; my $retry = 0; im_warn("creating lock file with uid=$> gid=$)\n") if (&debug('local')); $locked_by_file = 0; $locked_by_flock = 0; if ($type =~ /file/) { -# while (! sysopen(LOCK, "$base.lock", O_RDWR()|O_CREAT()|O_EXCL())) { +# while (!sysopen(LOCK, "$base.lock", O_RDWR()|O_CREAT()|O_EXCL())) { # if ($retry >= 10) { # im_warn("can't create $base.lock: $!\n"); # return -1; @@ -589,7 +574,7 @@ sub local_lockmbox ($$) { im_err "can't open $base :$!\n"; return -1; } - if (! &win95p ){ + if (! &win95p) { unless (flock (LOCK_FH, LOCK_EX|LOCK_NB)) { im_warn "can't flock $base: $!\n"; return -1; @@ -600,7 +585,7 @@ sub local_lockmbox ($$) { return 0; } -sub local_unlockmbox ($) { +sub local_unlockmbox($) { my $base = shift; my $rcode = 0; im_debug("removing lock file with uid=$> gid=$)\n") if (&debug('local')); @@ -612,7 +597,7 @@ sub local_unlockmbox ($) { $locked_by_file = 0; } if ($locked_by_flock) { - if (! &win95p ){ + if (! &win95p) { flock(LOCK_FH, LOCK_UN); } $locked_by_flock = 0; @@ -620,9 +605,9 @@ sub local_unlockmbox ($) { return $rcode; } -sub lcl_store_header ($$) { - my ($href, $msg) = @_; - my ($line); +sub lcl_store_header($$) { + my($href, $msg) = @_; + my($line); foreach (@$msg) { my $l = $_; @@ -640,8 +625,8 @@ sub lcl_store_header ($$) { lcl_set_line($href, $line); } -sub lcl_set_line ($$) { - my ($href, $line) = @_; +sub lcl_set_line($$) { + my($href, $line) = @_; return unless ($line =~ /^([^:]*):\s*(.*)$/); my $label = lc($1); @@ -660,6 +645,39 @@ sub lcl_set_line ($$) { 1; +__END__ + +=head1 NAME + +IM::LocalMbox - local mailbox managing + +=head1 SYNOPSIS + + use IM::LocalMbox; + + $num_msgs = &local_get_msg(source_mailbox, destination_folder, access_mode); + +=head1 DESCRIPTION + +The I<IM::LocalMbox> module handles local mailbox. +MH folder, MMDF file, mbox, and Maildir are supported. + +This modules is provided by IM (Internet Message). + +=head1 EXAMPLES + + $mbox = 'local:/var/mail/motonori'; + $folder = '+inbox' + $num_msgs = &local_get_msg($mbox, $folder, 'get'); + +=head1 COPYRIGHT + +IM (Internet Message) is copyrighted by IM developing team. +You can redistribute it and/or modify it under the modified BSD +license. See the copyright file for more details. + +=cut + ### Copyright (C) 1997, 1998, 1999 IM developing team ### All rights reserved. ### |
