+sub compress_all_xml_files($) {
+ my ($dir) = @_;
+ opendir (my $dirp, $dir) || error ("$dir: $!");
+ my @files = readdir ($dirp);
+ closedir $dirp;
+ foreach my $f (sort @files) {
+ next unless ($f =~ m/\.xml$/si);
+ my $filename = "$dir/$f";
+ open (my $in, '<', $filename) || error ("$filename: $!");
+ print STDERR "$progname: read $filename\n" if ($verbose > 2);
+ local $/ = undef; # read entire file
+ my $body = <$in>;
+ close $in;
+
+ if ($body =~ m/^<\?xml/s) {
+ my $body2 = '';
+ gzip (\$body, \$body2) || error ("$filename: xml gzip: $GzipError");
+ $body = $body2;
+ my $file_tmp = "$filename.tmp";
+ open (my $out, '>:raw', $file_tmp) || error ("$file_tmp: $!");
+ print $out $body || error ("$file_tmp: $!");
+ close $out || error ("$file_tmp: $!");
+
+ if (!rename ("$file_tmp", "$filename")) {
+ unlink "$file_tmp";
+ error ("mv \"$file_tmp\" \"$filename\": $!");
+ }
+ print STDERR "$progname: compressed $filename\n" if ($verbose);
+ } elsif ($verbose > 2) {
+ print STDERR "$filename: already compressed\n";
+ }
+ }
+}
+