X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=src%2Fssic.pl;h=2f3744e8a4e80310e87c135235a2e0037b559e26;hb=1d1bd008953e9e9a7fc5dd71698d65b72d24fd37;hp=c12ff210b4046ae9cc72645def51ac4d1076f093;hpb=66789c72d83f31b6b6f725d27937967fcce00c32;p=ssic.git diff --git a/src/ssic.pl b/src/ssic.pl old mode 100644 new mode 100755 index c12ff21..2f3744e --- a/src/ssic.pl +++ b/src/ssic.pl @@ -1,4 +1,19 @@ #!/usr/bin/perl +# +# Copyright (C) 2013 Patrick "P. J." McDermott +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . use strict; use warnings; @@ -28,11 +43,11 @@ sub main } if (exists($opts{'h'})) { - help(*STDERR); + help(*STDOUT); exit(0); } if (exists($opts{'V'})) { - version(*STDERR); + version(*STDOUT); exit(0); } @@ -105,34 +120,39 @@ sub compile { my ($input, $output, $vars, $root) = @_; my $input_fh; + my $input_abs; my $output_fh; my $ssi; my $var_name; my $var_value; - if ($input eq $output) { - error(4, "Input and output files are equal\n"); + if ($input eq $output and $input ne "-") { + warning("Input and output files are equal\n"); } if ($input eq "-") { $input_fh = *STDIN; + $input_abs = File::Spec->rel2abs("."); } else { if (not open($input_fh, "<", $input)) { error(4, "%s: %s\n", $input, $!); } + $input_abs = File::Spec->rel2abs($input); } if ($output eq "-") { $output_fh = *STDOUT; } else { - if (not open($output_fh, ">", $output)) { - error(4, "%s: %s\n", $output, $!); + if (not open($output_fh, ">", $output . "~")) { + error(4, "%s: %s\n", $output . "~", $!); } } + # CGI::SSI uses SCRIPT_FILENAME to determine the value of LAST_MODIFIED. %ENV = ( "DOCUMENT_NAME" => $input, "DOCUMENT_URI" => $input, "DOCUMENT_ROOT" => $root, + "SCRIPT_FILENAME" => $input_abs, ); $CGI::SSI::DEBUG = 0; @@ -147,6 +167,17 @@ sub compile } print($output_fh $ssi->process(<$input_fh>)); + + if ($input ne "-") { + close($input_fh); + } + if ($output ne "-") { + close($output_fh); + } + + if (not rename($output . "~", $output)) { + error(4, "%s: %s\n", $output, $!); + } } main();