blob: 6cf1661001e7142ab83e5067d235a3f293f2d05d [file] [log] [blame]
#**************************************************************
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
#**************************************************************
package installer::files;
use installer::exiter;
use installer::logger;
############################################
# File Operations
############################################
sub check_file
{
my ($arg) = @_;
if ( $installer::globals::debug ) { installer::logger::debuginfo("installer::files::check_file : $arg"); }
if(!( -f $arg ))
{
installer::exiter::exit_program("ERROR: Cannot find file $arg", "check_file");
}
}
sub read_file
{
my ($localfile) = @_;
my @localfile = ();
if ( $installer::globals::debug ) { installer::logger::debuginfo("installer::files::read_file : $localfile"); }
open( IN, "<$localfile" ) || installer::exiter::exit_program("ERROR: Cannot open file $localfile for reading", "read_file");
# Don't use "my @localfile = <IN>" here, because
# perl has a problem with the internal "large_and_huge_malloc" function
# when calling perl using MacOS 10.5 with a perl built with MacOS 10.4
while ( $line = <IN> ) {
push @localfile, $line;
}
close( IN );
return \@localfile;
}
###########################################
# Saving files, arrays and hashes
###########################################
sub save_file
{
my ($savefile, $savecontent) = @_;
if ( $installer::globals::debug ) { installer::logger::debuginfo("installer::files::save_file : $savefile : $#{$savecontent}"); }
if ( open( OUT, ">$savefile" ) )
{
print OUT @{$savecontent};
close( OUT);
}
else
{
# it is useless to save a log file, if there is no write access
if ( $savefile =~ /\.log/ )
{
print "*************************************************\n";
print "ERROR: Cannot write log file: $savefile";
print "*************************************************\n";
exit(-1); # exiting the program to avoid endless loops
}
installer::exiter::exit_program("ERROR: Cannot open file $savefile for writing", "save_file");
}
}
sub save_hash
{
my ($savefile, $hashref) = @_;
if ( $installer::globals::debug ) { installer::logger::debuginfo("installer::files::save_hash : $savefile"); }
my @printcontent = ();
my $itemkey;
foreach $itemkey ( keys %{$hashref} )
{
my $line = "";
my $itemvalue = $hashref->{$itemkey};
$line = $itemkey . "=" . $itemvalue . "\n";
push(@printcontent, $line);
}
open( OUT, ">$savefile" ) || installer::exiter::exit_program("ERROR: Cannot open file $savefile for writing", "save_hash");
print OUT @printcontent;
close( OUT);
}
sub save_array_of_hashes
{
my ($savefile, $arrayref) = @_;
if ( $installer::globals::debug ) { installer::logger::debuginfo("installer::files::save_array_of_hashes : $savefile : $#{$arrayref}"); }
my @printcontent = ();
for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
{
my $line = "";
my $hashref = ${$arrayref}[$i];
my $itemkey;
foreach $itemkey ( keys %{$hashref} )
{
my $itemvalue = $hashref->{$itemkey};
$line = $line . $itemkey . "=" . $itemvalue . "\t";
}
$line = $line . "\n";
push(@printcontent, $line);
}
open( OUT, ">$savefile" ) || installer::exiter::exit_program("ERROR: Cannot open file $savefile for writing", "save_array_of_hashes");
print OUT @printcontent;
close( OUT);
}
sub save_array_of_hashes_modules
{
my ($savefile, $arrayref) = @_;
if ( $installer::globals::debug ) { installer::logger::debuginfo("installer::files::save_array_of_hashes : $savefile : $#{$arrayref}"); }
my @printcontent = ();
for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
{
my $line = "***************************************************\n";
my $hashref = ${$arrayref}[$i];
my $itemkey;
foreach $itemkey ( keys %{$hashref} )
{
my $itemvalue = $hashref->{$itemkey};
$line = $line . $itemkey . "=" . $itemvalue . "\n";
}
$line = $line . "\n";
push(@printcontent, $line);
}
open( OUT, ">$savefile" ) || installer::exiter::exit_program("ERROR: Cannot open file $savefile for writing", "save_array_of_hashes");
print OUT @printcontent;
close( OUT);
}
###########################################
# Binary file operations
###########################################
sub read_binary_file
{
my ($filename) = @_;
if ( $installer::globals::debug ) { installer::logger::debuginfo("installer::files::read_binary_file : $filename"); }
my $file;
open( IN, "<$filename" ) || installer::exiter::exit_program("ERROR: Cannot open file $filename for reading", "read_binary_file");
binmode IN;
seek IN, 0, 2;
my $length = tell IN;
seek IN, 0, 0;
read IN, $file, $length;
close IN;
return $file;
}
sub save_binary_file
{
my ($file, $filename) = @_;
if ( $installer::globals::debug ) { installer::logger::debuginfo("installer::files::save_binary_file : $filename"); }
open( OUT, ">$filename" ) || installer::exiter::exit_program("ERROR: Cannot open file $filename for writing", "save_binary_file");
binmode OUT;
print OUT $file;
close OUT;
}
1;