X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FSearchIdx.pm;h=85821ea706a41a66a9a0e1aee3c40aecab6c969a;hb=cd389aac52936c82f3416b3ceefe21e1250b8a3e;hp=a790ac4076acefbd6b50b68ae706fc2fe0ae40fc;hpb=f77b21173e730a3daa8f5eed6d73835a682b3f04;p=public-inbox.git diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm index a790ac40..85821ea7 100644 --- a/lib/PublicInbox/SearchIdx.pm +++ b/lib/PublicInbox/SearchIdx.pm @@ -549,11 +549,23 @@ sub unindex_mm { $self->{mm}->mid_delete(mid_mime($mime)); } +# returns the number of bytes to add if given a non-CRLF arg +sub crlf_adjust ($) { + if (index($_[0], "\r\n") < 0) { + # common case is LF-only, every \n needs an \r; + # so favor a cheap tr// over an expensive m//g + $_[0] =~ tr/\n/\n/; + } else { # count number of '\n' w/o '\r', expensive: + scalar(my @n = ($_[0] =~ m/(?cat_async callback my ($bref, $oid, $type, $size, $sync) = @_; my ($nr, $max) = @$sync{qw(nr max)}; ++$$nr; $$max -= $size; + $size += crlf_adjust($$bref); my $smsg = bless { bytes => $size, blob => $oid }, 'PublicInbox::Smsg'; my $self = $sync->{sidx}; my $eml = PublicInbox::Eml->new($bref);