1#**************************************************************
2#
3#  Licensed to the Apache Software Foundation (ASF) under one
4#  or more contributor license agreements.  See the NOTICE file
5#  distributed with this work for additional information
6#  regarding copyright ownership.  The ASF licenses this file
7#  to you under the Apache License, Version 2.0 (the
8#  "License"); you may not use this file except in compliance
9#  with the License.  You may obtain a copy of the License at
10#
11#    http://www.apache.org/licenses/LICENSE-2.0
12#
13#  Unless required by applicable law or agreed to in writing,
14#  software distributed under the License is distributed on an
15#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16#  KIND, either express or implied.  See the License for the
17#  specific language governing permissions and limitations
18#  under the License.
19#
20#**************************************************************
21
22
23
24package installer::files;
25
26use installer::exiter;
27use installer::logger;
28
29############################################
30# File Operations
31############################################
32
33sub check_file
34{
35	my ($arg) = @_;
36
37	if ( $installer::globals::debug ) { installer::logger::debuginfo("installer::files::check_file : $arg"); }
38
39	if(!( -f $arg ))
40	{
41		installer::exiter::exit_program("ERROR: Cannot find file $arg", "check_file");
42	}
43}
44
45sub read_file
46{
47	my ($localfile) = @_;
48	my @localfile = ();
49
50	if ( $installer::globals::debug ) { installer::logger::debuginfo("installer::files::read_file : $localfile"); }
51
52	open( IN, "<$localfile" ) || installer::exiter::exit_program("ERROR: Cannot open file $localfile for reading", "read_file");
53
54#	Don't use "my @localfile = <IN>" here, because
55#	perl has a problem with the internal "large_and_huge_malloc" function
56#	when calling perl using MacOS 10.5 with a perl built with MacOS 10.4
57	while ( $line = <IN> ) {
58		push @localfile, $line;
59	}
60
61	close( IN );
62
63	return \@localfile;
64}
65
66###########################################
67# Saving files, arrays and hashes
68###########################################
69
70sub save_file
71{
72	my ($savefile, $savecontent) = @_;
73
74	if ( $installer::globals::debug ) { installer::logger::debuginfo("installer::files::save_file : $savefile : $#{$savecontent}"); }
75
76	if ( open( OUT, ">$savefile" ) )
77	{
78		print OUT @{$savecontent};
79		close( OUT);
80	}
81	else
82	{
83		# it is useless to save a log file, if there is no write access
84
85		if ( $savefile =~ /\.log/ )
86		{
87			print "\n*************************************************\n";
88			print "ERROR: Cannot write log file: $savefile";
89			print "\n*************************************************\n";
90			exit(-1);	# exiting the program to avoid endless loops
91		}
92
93		installer::exiter::exit_program("ERROR: Cannot open file $savefile for writing", "save_file");
94	}
95}
96
97sub save_hash
98{
99	my ($savefile, $hashref) = @_;
100
101	if ( $installer::globals::debug ) { installer::logger::debuginfo("installer::files::save_hash : $savefile"); }
102
103	my @printcontent = ();
104
105	my $itemkey;
106
107	foreach $itemkey ( keys %{$hashref} )
108	{
109		my $line = "";
110		my $itemvalue = $hashref->{$itemkey};
111		$line = $itemkey . "=" . $itemvalue . "\n";
112		push(@printcontent, $line);
113	}
114
115	open( OUT, ">$savefile" ) || installer::exiter::exit_program("ERROR: Cannot open file $savefile for writing", "save_hash");
116	print OUT @printcontent;
117	close( OUT);
118}
119
120sub save_array_of_hashes
121{
122	my ($savefile, $arrayref) = @_;
123
124	if ( $installer::globals::debug ) { installer::logger::debuginfo("installer::files::save_array_of_hashes : $savefile : $#{$arrayref}"); }
125
126	my @printcontent = ();
127
128	for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
129	{
130		my $line = "";
131		my $hashref = ${$arrayref}[$i];
132		my $itemkey;
133
134		foreach $itemkey ( keys %{$hashref} )
135		{
136			my $itemvalue = $hashref->{$itemkey};
137			$line = $line . $itemkey . "=" . $itemvalue . "\t";
138		}
139
140		$line = $line . "\n";
141
142		push(@printcontent, $line);
143	}
144
145	open( OUT, ">$savefile" ) || installer::exiter::exit_program("ERROR: Cannot open file $savefile for writing", "save_array_of_hashes");
146	print OUT @printcontent;
147	close( OUT);
148}
149
150sub save_array_of_hashes_modules
151{
152	my ($savefile, $arrayref) = @_;
153
154	if ( $installer::globals::debug ) { installer::logger::debuginfo("installer::files::save_array_of_hashes : $savefile : $#{$arrayref}"); }
155
156	my @printcontent = ();
157
158	for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
159	{
160		my $line = "***************************************************\n";
161		my $hashref = ${$arrayref}[$i];
162		my $itemkey;
163
164		foreach $itemkey ( keys %{$hashref} )
165		{
166			my $itemvalue = $hashref->{$itemkey};
167			$line = $line . $itemkey . "=" . $itemvalue . "\n";
168		}
169
170		$line = $line . "\n";
171
172		push(@printcontent, $line);
173	}
174
175	open( OUT, ">$savefile" ) || installer::exiter::exit_program("ERROR: Cannot open file $savefile for writing", "save_array_of_hashes");
176	print OUT @printcontent;
177	close( OUT);
178}
179
180###########################################
181# Binary file operations
182###########################################
183
184sub read_binary_file
185{
186	my ($filename) = @_;
187
188	if ( $installer::globals::debug ) { installer::logger::debuginfo("installer::files::read_binary_file : $filename"); }
189
190	my $file;
191
192	open( IN, "<$filename" ) || installer::exiter::exit_program("ERROR: Cannot open file $filename for reading", "read_binary_file");
193	binmode IN;
194	seek IN, 0, 2;
195	my $length = tell IN;
196	seek IN, 0, 0;
197	read IN, $file, $length;
198	close IN;
199
200	return $file;
201}
202
203sub save_binary_file
204{
205	my ($file, $filename) = @_;
206
207	if ( $installer::globals::debug ) { installer::logger::debuginfo("installer::files::save_binary_file : $filename"); }
208
209	open( OUT, ">$filename" ) || installer::exiter::exit_program("ERROR: Cannot open file $filename for writing", "save_binary_file");
210	binmode OUT;
211	print OUT $file;
212	close OUT;
213}
214
2151;
216