xref: /AOO41X/main/solenv/bin/modules/installer/files.pm (revision fe22d2cfc602815794415026f1317bd625db6f83)
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";
88            print "ERROR: Cannot write log file: $savefile";
89            print "*************************************************\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