diff options
Diffstat (limited to 'lib/Apache/Config/Preproc')
-rw-r--r-- | lib/Apache/Config/Preproc/ifdefine.pm | 2 | ||||
-rw-r--r-- | lib/Apache/Config/Preproc/include.pm | 21 |
2 files changed, 21 insertions, 2 deletions
diff --git a/lib/Apache/Config/Preproc/ifdefine.pm b/lib/Apache/Config/Preproc/ifdefine.pm index 834d602..5bf3a3f 100644 --- a/lib/Apache/Config/Preproc/ifdefine.pm +++ b/lib/Apache/Config/Preproc/ifdefine.pm @@ -115,7 +115,7 @@ __END__ =head1 NAME -Apache::Config::Preproc::ifmodule - expand IfDefine sections +Apache::Config::Preproc::ifdefine - expand IfDefine sections =head1 SYNOPSIS diff --git a/lib/Apache/Config/Preproc/include.pm b/lib/Apache/Config/Preproc/include.pm index 32b753d..f7c851c 100644 --- a/lib/Apache/Config/Preproc/include.pm +++ b/lib/Apache/Config/Preproc/include.pm @@ -4,6 +4,7 @@ use warnings; use Apache::Admin::Config; use Apache::Config::Preproc; use File::Spec; +use Cwd 'abs_path'; use Carp; sub new { @@ -13,6 +14,9 @@ sub new { local %_ = @_; $self->{server_root} = delete $_{server_root}; croak "unrecognized arguments" if keys(%_); + $self->{check_included} = $^O eq 'MSWin32' + ? \&_check_included_path + : \&_check_included_stat; return $self; } @@ -65,19 +69,34 @@ sub expand { sub check_included { my ($self, $file) = @_; + return $self->${ \ $self->{check_included} }($file); +} + +# Default included file table for unix-like OSes +sub _check_included_stat { + my ($self, $file) = @_; my ($dev,$ino) = stat($file) or return 0; return 1 if $self->{included}{$dev}{$ino}; $self->{included}{$dev}{$ino} = 1; return 0; } +# Path-bases file table, for defective OSes (MSWin32) +sub _check_included_path { + my ($self, $file) = @_; + my $path = abs_path($file); + return 1 if $self->{included}{$path}; + $self->{included}{$path} = 1; + return 0; +} + 1; __END__ =head1 NAME -Apache::Config::Preproc::ifmodule - expand Include statements +Apache::Config::Preproc::include - expand Include statements =head1 SYNOPSIS |