X-Git-Url: https://git.jankratochvil.net/?p=redirector-ad.git;a=blobdiff_plain;f=redirector;h=380174238fb17f0088e8c4d471bb84e2c410f0be;hp=cfb7f35a7e92656ce08328980c4b1d5cea3564ec;hb=20acbac808f815aeced5980b0c9623804279dcca;hpb=44e068abe214b3ca6793250e84348aa79eff7126 diff --git a/redirector b/redirector index cfb7f35..3801742 100755 --- a/redirector +++ b/redirector @@ -1,7 +1,46 @@ -#! /bin/sh +#! /usr/bin/perl +# +# $Id$ -DIR_AD=/usr/local/squid/etc/ad +use strict; +use warnings; +use File::Basename; -exec /usr/bin/perl -e '$|=1; while (<>) { -'"` (cd "$DIR_AD";m4 -P main)|awk '/./{print "s@^http://"$0".*$@http://localhost/cgi-bin/redirector-ad.cgi?"$0"@;"}' `"' -print; }' +use re 'eval'; + +my $DIR_AD=dirname($0)."/ad"; + + +chdir $DIR_AD or die "chdir $DIR_AD: $!"; +select STDOUT; +$|=1; +my @got; + +RELOAD: { + my $patt=""; + open(M4,"-|","m4 --prefix-builtins --synclines main") or die "m4 run: $!"; + my %files; + while () { + chomp; + next if !$_; + do { $files{$1}=undef; next; } if /^#\s*line\s+\d+\s+"(.*)"$/; + $patt.="|" if $patt; + $patt.=$_."(?{ '"; + s/'/'."'".'/g; + $patt.="$_'; })"; + } + close M4; + $patt=qr @^http://($patt).*\n$@; + + while ($_=shift @got || <>) { + while (my($file,$old)=each %files) { + my $new=(stat $file)[9]; + $files{$file}=$new; + next if !defined $old || $old==$new; + push @got,$_; + redo RELOAD; + } + s@$patt@http://localhost/cgi-bin/redirector-ad.cgi?$^R\n@; + print; + } + } # RELOAD