1cdf0e10cSrcweirpackage CallExternals;
2cdf0e10cSrcweir
3*9780544fSAndrew Rist#**************************************************************
4*9780544fSAndrew Rist#
5*9780544fSAndrew Rist#  Licensed to the Apache Software Foundation (ASF) under one
6*9780544fSAndrew Rist#  or more contributor license agreements.  See the NOTICE file
7*9780544fSAndrew Rist#  distributed with this work for additional information
8*9780544fSAndrew Rist#  regarding copyright ownership.  The ASF licenses this file
9*9780544fSAndrew Rist#  to you under the Apache License, Version 2.0 (the
10*9780544fSAndrew Rist#  "License"); you may not use this file except in compliance
11*9780544fSAndrew Rist#  with the License.  You may obtain a copy of the License at
12*9780544fSAndrew Rist#
13*9780544fSAndrew Rist#    http://www.apache.org/licenses/LICENSE-2.0
14*9780544fSAndrew Rist#
15*9780544fSAndrew Rist#  Unless required by applicable law or agreed to in writing,
16*9780544fSAndrew Rist#  software distributed under the License is distributed on an
17*9780544fSAndrew Rist#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18*9780544fSAndrew Rist#  KIND, either express or implied.  See the License for the
19*9780544fSAndrew Rist#  specific language governing permissions and limitations
20*9780544fSAndrew Rist#  under the License.
21*9780544fSAndrew Rist#
22*9780544fSAndrew Rist#**************************************************************
23*9780544fSAndrew Rist
24*9780544fSAndrew Rist
25cdf0e10cSrcweir
26cdf0e10cSrcweiruse English;
27cdf0e10cSrcweiruse warnings;
28cdf0e10cSrcweiruse strict;
29cdf0e10cSrcweiruse loghelper;
30cdf0e10cSrcweir
31cdf0e10cSrcweirBEGIN {
32cdf0e10cSrcweir    use Exporter   ();
33cdf0e10cSrcweir    our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
34cdf0e10cSrcweir
35cdf0e10cSrcweir    $VERSION     = 1.00;
36cdf0e10cSrcweir    # if using RCS/CVS, this may be preferred
37cdf0e10cSrcweir    $VERSION = do { my @r = (q$Revision: 1.29 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker
38cdf0e10cSrcweir    @ISA         = qw(Exporter);
39cdf0e10cSrcweir    @EXPORT      = qw(&callphp &getPHPExecutable &ExecSQL &callperl &getPerlExecutable &calljava &setJavaExecutable &getJavaExecutable &setToolsPath &quote &quoteIfNeed &set_logfile &close_logfile );
40cdf0e10cSrcweir    %EXPORT_TAGS = ( );     # eg: TAG => [ qw!name1 name2! ],
41cdf0e10cSrcweir    # your exported package globals go here,
42cdf0e10cSrcweir    # as well as any optionally exported functions
43cdf0e10cSrcweir    @EXPORT_OK   = ( ); # qw($Var1 %Hashit &func3);
44cdf0e10cSrcweir}
45cdf0e10cSrcweir
46cdf0e10cSrcweir# ------------------------------------------------------------------------------
47cdf0e10cSrcweir# small helper, which replaces the return code
48cdf0e10cSrcweirsub errorAdaption($)
49cdf0e10cSrcweir{
50cdf0e10cSrcweir    my $error = shift;
51cdf0e10cSrcweir    if ($error != 0)
52cdf0e10cSrcweir    {
53cdf0e10cSrcweir        $error = $error / 256;
54cdf0e10cSrcweir    }
55cdf0e10cSrcweir    if ($error > 127)
56cdf0e10cSrcweir    {
57cdf0e10cSrcweir        $error = $error - 256;
58cdf0e10cSrcweir    }
59cdf0e10cSrcweir    return $error;
60cdf0e10cSrcweir}
61cdf0e10cSrcweir# ------------------------------------------------------------------------------
62cdf0e10cSrcweir# helper to call external php with popen
63cdf0e10cSrcweirsub callphp($$$)
64cdf0e10cSrcweir{
65cdf0e10cSrcweir    local *IN_FILE;
66cdf0e10cSrcweir    my $phpexe = shift;
67cdf0e10cSrcweir    my $phpprogram = shift;
68cdf0e10cSrcweir    my $sParams = shift;
69cdf0e10cSrcweir    my $line;
70cdf0e10cSrcweir    my $error;
71cdf0e10cSrcweir    my @result;
72cdf0e10cSrcweir
73cdf0e10cSrcweir    # print "Will send: $phpexe $sParams\n";
74cdf0e10cSrcweir    # log_print("CALLPHP: $phpexe $phpprogram $sParams\n");
75cdf0e10cSrcweir#    if (open(IN_FILE, "$phpexe $sParams 2>&1 |"))
76cdf0e10cSrcweir    if (open(IN_FILE, "$phpexe $phpprogram $sParams |"))
77cdf0e10cSrcweir    {
78cdf0e10cSrcweir        while ($line = <IN_FILE>)
79cdf0e10cSrcweir        {
80cdf0e10cSrcweir            chomp($line);
81cdf0e10cSrcweir            # $line .= " ";
82cdf0e10cSrcweir            push(@result, $line);
83cdf0e10cSrcweir            # print "callphp output: $line\n";
84cdf0e10cSrcweir        }
85cdf0e10cSrcweir        close(IN_FILE);
86cdf0e10cSrcweir        $error = errorAdaption($?);
87cdf0e10cSrcweir    }
88cdf0e10cSrcweir    else
89cdf0e10cSrcweir    {
90cdf0e10cSrcweir        print "callphp(): Can't popen '$phpexe' with parameter: '$sParams'\n";
91cdf0e10cSrcweir        $error = 1;
92cdf0e10cSrcweir    }
93cdf0e10cSrcweir    return $error, @result;
94cdf0e10cSrcweir}
95cdf0e10cSrcweir
96cdf0e10cSrcweir# ------------------------------------------------------------------------------
97cdf0e10cSrcweirsub getPHPExecutable()
98cdf0e10cSrcweir{
99cdf0e10cSrcweir    my $phpexe;
100cdf0e10cSrcweir    if ($OSNAME eq "solaris")
101cdf0e10cSrcweir    {
102cdf0e10cSrcweir        $phpexe = "php5";
103cdf0e10cSrcweir    }
104cdf0e10cSrcweir    elsif ($OSNAME eq "linux")
105cdf0e10cSrcweir    {
106cdf0e10cSrcweir        if ( -e "/usr/bin/php5") # Suse :-(
107cdf0e10cSrcweir        {
108cdf0e10cSrcweir            $phpexe = "php5";
109cdf0e10cSrcweir        }
110cdf0e10cSrcweir        elsif ( -e "/usr/bin/php") # Gentoo
111cdf0e10cSrcweir        {
112cdf0e10cSrcweir            $phpexe = "php";
113cdf0e10cSrcweir        }
114cdf0e10cSrcweir        else
115cdf0e10cSrcweir        {
116cdf0e10cSrcweir            print "getPHPExecutable(): no php exec found.\n";
117cdf0e10cSrcweir        }
118cdf0e10cSrcweir    }
119cdf0e10cSrcweir    elsif ( $OSNAME eq "MSWin32" )
120cdf0e10cSrcweir    {
121cdf0e10cSrcweir        $phpexe = "C:/programme/php/php.exe";
122cdf0e10cSrcweir        # add second try (xampp)
123cdf0e10cSrcweir        if (! -e $phpexe)
124cdf0e10cSrcweir        {
125cdf0e10cSrcweir            $phpexe = "C:/xampp/php/php.exe";
126cdf0e10cSrcweir        }
127cdf0e10cSrcweir    }
128cdf0e10cSrcweir    elsif ( $OSNAME eq "cygwin" )
129cdf0e10cSrcweir    {
130cdf0e10cSrcweir        $phpexe = "/cygdrive/c/programme/php/php";
131cdf0e10cSrcweir    }
132cdf0e10cSrcweir    else
133cdf0e10cSrcweir    {
134cdf0e10cSrcweir        print "getPHPExecutable(): unknown environment. ($OSNAME)\n";
135cdf0e10cSrcweir    }
136cdf0e10cSrcweir    if (! $phpexe)
137cdf0e10cSrcweir    {
138cdf0e10cSrcweir        print "getPHPExecutable(): ERROR: php executable not found.\n";
139cdf0e10cSrcweir        exit(1);
140cdf0e10cSrcweir    }
141cdf0e10cSrcweir    return $phpexe;
142cdf0e10cSrcweir}
143cdf0e10cSrcweir# ------------------------------------------------------------------------------
144cdf0e10cSrcweir# helper to call external java with popen
145cdf0e10cSrcweirsub calljava($$$)
146cdf0e10cSrcweir{
147cdf0e10cSrcweir    local *IN_FILE;
148cdf0e10cSrcweir    my $javaexe = shift;
149cdf0e10cSrcweir    my $sParams = shift;
150cdf0e10cSrcweir    my $sDebug = shift;
151cdf0e10cSrcweir    my $line;
152cdf0e10cSrcweir    my $error = 1;
153cdf0e10cSrcweir
154cdf0e10cSrcweir    if (! $javaexe)
155cdf0e10cSrcweir    {
156cdf0e10cSrcweir        log_print("ERROR: javaexe not set.\n");
157cdf0e10cSrcweir        return;
158cdf0e10cSrcweir    }
159cdf0e10cSrcweir    if (! $sDebug)
160cdf0e10cSrcweir    {
161cdf0e10cSrcweir        $sDebug = "";
162cdf0e10cSrcweir    }
163cdf0e10cSrcweir    $javaexe = quoteIfNeed($javaexe);
164cdf0e10cSrcweir    log_print ("CALLJAVA: $javaexe $sDebug $sParams\n");
165cdf0e10cSrcweir    if (open(IN_FILE, "$javaexe $sDebug $sParams 2>&1 |"))
166cdf0e10cSrcweir    {
167cdf0e10cSrcweir        while ($line = <IN_FILE>)
168cdf0e10cSrcweir        {
169cdf0e10cSrcweir            chomp($line);
170cdf0e10cSrcweir            log_print ("- $line\n");
171cdf0e10cSrcweir        }
172cdf0e10cSrcweir        close(IN_FILE);
173cdf0e10cSrcweir        $error = errorAdaption($?);
174cdf0e10cSrcweir    }
175cdf0e10cSrcweir    else
176cdf0e10cSrcweir    {
177cdf0e10cSrcweir        log_print ("calljava(): Can't popen '$javaexe' with parameter '$sParams'\n");
178cdf0e10cSrcweir        $error = 1;
179cdf0e10cSrcweir    }
180cdf0e10cSrcweir    return $error;
181cdf0e10cSrcweir}
182cdf0e10cSrcweir
183cdf0e10cSrcweir# ------------------------------------------------------------------------------
184cdf0e10cSrcweirsub getPerlExecutable()
185cdf0e10cSrcweir{
186cdf0e10cSrcweir    my $perlexe;
187cdf0e10cSrcweir    if ( $ENV{PERL} )
188cdf0e10cSrcweir    {
189cdf0e10cSrcweir        $perlexe = $ENV{PERL};
190cdf0e10cSrcweir    }
191cdf0e10cSrcweir    elsif ( $ENV{PERLEXE} )
192cdf0e10cSrcweir    {
193cdf0e10cSrcweir        $perlexe = $ENV{PERLEXE};
194cdf0e10cSrcweir    }
195cdf0e10cSrcweir    else
196cdf0e10cSrcweir    {
197cdf0e10cSrcweir        if ($OSNAME eq "MSWin32")
198cdf0e10cSrcweir        {
199cdf0e10cSrcweir            $perlexe="C:/xampp/perl/bin/perl.exe";
200cdf0e10cSrcweir            if (! -e $perlexe)
201cdf0e10cSrcweir            {
202cdf0e10cSrcweir                $perlexe="r:/btw/perl/bin/perl";
203cdf0e10cSrcweir            }
204cdf0e10cSrcweir            if (! -e $perlexe)
205cdf0e10cSrcweir            {
206cdf0e10cSrcweir                $perlexe="C:/Programme/Perl/bin/perl.exe";
207cdf0e10cSrcweir            }
208cdf0e10cSrcweir        }
209cdf0e10cSrcweir        elsif ($OSNAME eq "cygwin")
210cdf0e10cSrcweir        {
211cdf0e10cSrcweir            $perlexe = "perl";
212cdf0e10cSrcweir        }
213cdf0e10cSrcweir        elsif ($OSNAME eq "solaris")
214cdf0e10cSrcweir        {
215cdf0e10cSrcweir            $perlexe="/so/env/bt_solaris_intel/bin/perl";
216cdf0e10cSrcweir        }
217cdf0e10cSrcweir        elsif ($OSNAME eq "linux")
218cdf0e10cSrcweir        {
219cdf0e10cSrcweir            $perlexe="/so/env/bt_linux_libc2.32/DEV300/bin/perl";
220cdf0e10cSrcweir        }
221cdf0e10cSrcweir        else
222cdf0e10cSrcweir        {
223cdf0e10cSrcweir            log_print "WARNING: Use only the fallback of perl executable.\n";
224cdf0e10cSrcweir            $perlexe = "perl"; # FALLBACK
225cdf0e10cSrcweir        }
226cdf0e10cSrcweir    }
227cdf0e10cSrcweir    if ( ! -e $perlexe)
228cdf0e10cSrcweir    {
229cdf0e10cSrcweir        log_print "getPerlExecutable(): There exist no perl executable.\n";
230cdf0e10cSrcweir        exit(1);
231cdf0e10cSrcweir    }
232cdf0e10cSrcweir    return $perlexe;
233cdf0e10cSrcweir}
234cdf0e10cSrcweir# ------------------------------------------------------------------------------
235cdf0e10cSrcweir# helper to call external perl with popen
236cdf0e10cSrcweirsub callperl($$$)
237cdf0e10cSrcweir{
238cdf0e10cSrcweir    local *IN_FILE;
239cdf0e10cSrcweir    my $perlexe = shift;
240cdf0e10cSrcweir    my $perlprogram = shift;
241cdf0e10cSrcweir    my $sParams = shift;
242cdf0e10cSrcweir    my $line;
243cdf0e10cSrcweir    my $error;
244cdf0e10cSrcweir
245cdf0e10cSrcweir    log_print("CALLPERL: $perlexe $perlprogram $sParams\n");
246cdf0e10cSrcweir#    if (open(IN_FILE, "$perlexe $sParams 2>&1 |"))
247cdf0e10cSrcweir    if (open(IN_FILE, "$perlexe $perlprogram $sParams |"))
248cdf0e10cSrcweir    {
249cdf0e10cSrcweir        while ($line = <IN_FILE>)
250cdf0e10cSrcweir        {
251cdf0e10cSrcweir            chomp($line);
252cdf0e10cSrcweir            log_print ("- $line\n");
253cdf0e10cSrcweir        }
254cdf0e10cSrcweir        close(IN_FILE);
255cdf0e10cSrcweir        $error = errorAdaption($?);
256cdf0e10cSrcweir    }
257cdf0e10cSrcweir    else
258cdf0e10cSrcweir    {
259cdf0e10cSrcweir        log_print ("Can't popen '$perlexe' with parameter: '$sParams'\n");
260cdf0e10cSrcweir        $error = 1;
261cdf0e10cSrcweir    }
262cdf0e10cSrcweir    return $error;
263cdf0e10cSrcweir}
264cdf0e10cSrcweir# ------------------------------------------------------------------------------
265cdf0e10cSrcweirour $sJavaExecutable;
266cdf0e10cSrcweirsub setJavaExecutable($)
267cdf0e10cSrcweir{
268cdf0e10cSrcweir    $sJavaExecutable = shift;
269cdf0e10cSrcweir}
270cdf0e10cSrcweir
271cdf0e10cSrcweir# sub getJava14()
272cdf0e10cSrcweir# {
273cdf0e10cSrcweir#     my $sJava14;
274cdf0e10cSrcweir#     if ($OSNAME eq "MSWin32")
275cdf0e10cSrcweir#     {
276cdf0e10cSrcweir#         if ($sJavaExecutable)
277cdf0e10cSrcweir#         {
278cdf0e10cSrcweir#             $sJava14 = $sJavaExecutable;
279cdf0e10cSrcweir#         }
280cdf0e10cSrcweir#         else
281cdf0e10cSrcweir#         {
282cdf0e10cSrcweir#             # HARDCODE!
283cdf0e10cSrcweir#             $sJava14 = "C:\\Programme\\Java\\j2re1.4.2_10\\bin\\java.exe";
284cdf0e10cSrcweir#         }
285cdf0e10cSrcweir#     }
286cdf0e10cSrcweir#     else
287cdf0e10cSrcweir#     {
288cdf0e10cSrcweir#         if ($sJavaExecutable)
289cdf0e10cSrcweir#         {
290cdf0e10cSrcweir#             $sJava14 = $sJavaExecutable;
291cdf0e10cSrcweir#         }
292cdf0e10cSrcweir#         else
293cdf0e10cSrcweir#         {
294cdf0e10cSrcweir#             # HARDCODE!
295cdf0e10cSrcweir#             $sJava14 = "/opt/java14/bin/java";
296cdf0e10cSrcweir#         }
297cdf0e10cSrcweir#     }
298cdf0e10cSrcweir#     if ( ! -e $sJava14 )
299cdf0e10cSrcweir#     {
300cdf0e10cSrcweir#         log_print ("Java14 not found. Is searched in '$sJava14'\n");
301cdf0e10cSrcweir#         # exit(1);
302cdf0e10cSrcweir#         return "";
303cdf0e10cSrcweir#     }
304cdf0e10cSrcweir#     return $sJava14;
305cdf0e10cSrcweir# }
306cdf0e10cSrcweir# ------------------------------------------------------------------------------
307cdf0e10cSrcweirsub getJava15()
308cdf0e10cSrcweir{
309cdf0e10cSrcweir    my $sJava15;
310cdf0e10cSrcweir    if ($sJavaExecutable)
311cdf0e10cSrcweir    {
312cdf0e10cSrcweir        $sJava15 = $sJavaExecutable;
313cdf0e10cSrcweir    }
314cdf0e10cSrcweir    else
315cdf0e10cSrcweir    {
316cdf0e10cSrcweir        if ($OSNAME eq "MSWin32")
317cdf0e10cSrcweir        {
318cdf0e10cSrcweir            # HARDCODE!
319cdf0e10cSrcweir            $sJava15 = "C:\\Programme\\Java\\jre1.5.0_22\\bin\\java.exe";
320cdf0e10cSrcweir            if ( ! -e $sJava15)
321cdf0e10cSrcweir            {
322cdf0e10cSrcweir                $sJava15 = "C:\\Program Files\\Java\\jre6\\bin\\java.exe";
323cdf0e10cSrcweir            }
324cdf0e10cSrcweir            if ( ! -e $sJava15)
325cdf0e10cSrcweir            {
326cdf0e10cSrcweir                $sJava15 = "C:\\Java\\jdk1.6\\bin\\java.exe";
327cdf0e10cSrcweir            }
328cdf0e10cSrcweir        }
329cdf0e10cSrcweir        elsif ($OSNAME eq "cygwin")
330cdf0e10cSrcweir        {
331cdf0e10cSrcweir            $sJava15 = "java";
332cdf0e10cSrcweir        }
333cdf0e10cSrcweir        else
334cdf0e10cSrcweir        {
335cdf0e10cSrcweir            # HARDCODE!
336cdf0e10cSrcweir            if ($OSNAME eq "solaris")
337cdf0e10cSrcweir            {
338cdf0e10cSrcweir                $sJava15 = "/usr/bin/java";
339cdf0e10cSrcweir            }
340cdf0e10cSrcweir            else
341cdf0e10cSrcweir            {
342cdf0e10cSrcweir                $sJava15 = "/usr/bin/java";
343cdf0e10cSrcweir                if ( ! -e $sJava15 )
344cdf0e10cSrcweir                {
345cdf0e10cSrcweir                    $sJava15 = "/opt/java15/bin/java";
346cdf0e10cSrcweir                }
347cdf0e10cSrcweir            }
348cdf0e10cSrcweir        }
349cdf0e10cSrcweir        if ( ! -e $sJava15 )
350cdf0e10cSrcweir        {
351cdf0e10cSrcweir            log_print ("Java15 not found. Is searched in '$sJava15'\n");
352cdf0e10cSrcweir            # exit(1);
353cdf0e10cSrcweir            return "";
354cdf0e10cSrcweir        }
355cdf0e10cSrcweir    }
356cdf0e10cSrcweir    return $sJava15;
357cdf0e10cSrcweir}
358cdf0e10cSrcweir# ------------------------------------------------------------------------------
359cdf0e10cSrcweirsub getJava16()
360cdf0e10cSrcweir{
361cdf0e10cSrcweir    my $sJava16;
362cdf0e10cSrcweir    if ($sJavaExecutable)
363cdf0e10cSrcweir    {
364cdf0e10cSrcweir        $sJava16 = $sJavaExecutable;
365cdf0e10cSrcweir    }
366cdf0e10cSrcweir    else
367cdf0e10cSrcweir    {
368cdf0e10cSrcweir        if ($OSNAME eq "MSWin32")
369cdf0e10cSrcweir        {
370cdf0e10cSrcweir            # HARDCODE!
371cdf0e10cSrcweir            $sJava16 = "C:\\Programme\\Java\\jre1.6.0_16\\bin\\java.exe";
372cdf0e10cSrcweir            if ( ! -e $sJava16)
373cdf0e10cSrcweir            {
374cdf0e10cSrcweir                $sJava16 = "C:\\Program Files\\Java\\jre6\\bin\\java.exe";
375cdf0e10cSrcweir            }
376cdf0e10cSrcweir            if ( ! -e $sJava16)
377cdf0e10cSrcweir            {
378cdf0e10cSrcweir                $sJava16 = "C:\\Java\\jdk1.6\\bin\\java.exe";
379cdf0e10cSrcweir            }
380cdf0e10cSrcweir            # }
381cdf0e10cSrcweir        }
382cdf0e10cSrcweir        elsif ($OSNAME eq "cygwin")
383cdf0e10cSrcweir        {
384cdf0e10cSrcweir            # $sJava16 = "java";
385cdf0e10cSrcweir            $sJava16 = "C:/Program Files/Java/jdk1.6.0_16/bin/java.exe";
386cdf0e10cSrcweir        }
387cdf0e10cSrcweir        else
388cdf0e10cSrcweir        {
389cdf0e10cSrcweir            # HARDCODE!
390cdf0e10cSrcweir            if ($OSNAME eq "solaris")
391cdf0e10cSrcweir            {
392cdf0e10cSrcweir                $sJava16 = "/usr/bin/java";
393cdf0e10cSrcweir            }
394cdf0e10cSrcweir            else
395cdf0e10cSrcweir            {
396cdf0e10cSrcweir                $sJava16 = "/usr/bin/java";
397cdf0e10cSrcweir                if ( ! -e $sJava16 )
398cdf0e10cSrcweir                {
399cdf0e10cSrcweir                    $sJava16 = "/opt/java16/bin/java";
400cdf0e10cSrcweir                }
401cdf0e10cSrcweir            }
402cdf0e10cSrcweir        }
403cdf0e10cSrcweir        if ( ! -e $sJava16 )
404cdf0e10cSrcweir        {
405cdf0e10cSrcweir            log_print ("Java16 not found. Is searched in '$sJava16'\n");
406cdf0e10cSrcweir            # exit(1);
407cdf0e10cSrcweir            return "";
408cdf0e10cSrcweir        }
409cdf0e10cSrcweir    }
410cdf0e10cSrcweir    return $sJava16;
411cdf0e10cSrcweir}
412cdf0e10cSrcweir
413cdf0e10cSrcweir# ------------------------------------------------------------------------------
414cdf0e10cSrcweirsub getJavaExecutable()
415cdf0e10cSrcweir{
416cdf0e10cSrcweir    return getJava16();
417cdf0e10cSrcweir}
418cdf0e10cSrcweir
419cdf0e10cSrcweir# ------------------------------------------------------------------------------
420cdf0e10cSrcweir# this function is a helper for parameters
421cdf0e10cSrcweir# if quotes the whole string with 'STR' or "STR" and replace quotes in it's content for the right.
422cdf0e10cSrcweirsub singleQuote($)
423cdf0e10cSrcweir{
424cdf0e10cSrcweir    my $sStr = shift;
425cdf0e10cSrcweir    if ( $OSNAME eq "MSWin32")
426cdf0e10cSrcweir    {
427cdf0e10cSrcweir        # we are MSWin32 (quote \" stronger)
428cdf0e10cSrcweir        # $sStr =~ s/\'/\"/g;
429cdf0e10cSrcweir        $sStr =~ s/\'/\\\"/g;
430cdf0e10cSrcweir        return "\"" . $sStr . "\"";
431cdf0e10cSrcweir    }
432cdf0e10cSrcweir    else
433cdf0e10cSrcweir    {
434cdf0e10cSrcweir        if (index($sStr, "'") >= 0)
435cdf0e10cSrcweir        {
436cdf0e10cSrcweir            # replace all single quotes ("'") by "\""
437cdf0e10cSrcweir            $sStr =~ s/\'/\"/g;
438cdf0e10cSrcweir        }
439cdf0e10cSrcweir    }
440cdf0e10cSrcweir    return "'" . $sStr . "'";
441cdf0e10cSrcweir}
442cdf0e10cSrcweir
443cdf0e10cSrcweirsub quote($)
444cdf0e10cSrcweir{
445cdf0e10cSrcweir    my $sName = shift;
446cdf0e10cSrcweir    return "\"" . $sName . "\"";
447cdf0e10cSrcweir}
448cdf0e10cSrcweir
449cdf0e10cSrcweirsub quoteIfNeed($)
450cdf0e10cSrcweir{
451cdf0e10cSrcweir    my $sName = shift;
452cdf0e10cSrcweir    if (-1 != index($sName, " "))
453cdf0e10cSrcweir    {
454cdf0e10cSrcweir        return quote($sName);
455cdf0e10cSrcweir    }
456cdf0e10cSrcweir    return $sName;
457cdf0e10cSrcweir}
458cdf0e10cSrcweir
459cdf0e10cSrcweir
460cdf0e10cSrcweir# ------------------------------------------------------------------------------
461cdf0e10cSrcweirour $sToolsPath;
462cdf0e10cSrcweirsub setToolsPath($)
463cdf0e10cSrcweir{
464cdf0e10cSrcweir    my $sNewPath = shift;
465cdf0e10cSrcweir    $sToolsPath = $sNewPath;
466cdf0e10cSrcweir}
467cdf0e10cSrcweir
468cdf0e10cSrcweirsub ExecSQL($)
469cdf0e10cSrcweir{
470cdf0e10cSrcweir    my $sSQL = shift;
471cdf0e10cSrcweir
472cdf0e10cSrcweir    my $error;
473cdf0e10cSrcweir    my @aResult;
474cdf0e10cSrcweir    my $sSQLDirect;
475cdf0e10cSrcweir    if ($sToolsPath)
476cdf0e10cSrcweir    {
477cdf0e10cSrcweir        $sSQLDirect = $sToolsPath;
478cdf0e10cSrcweir        $sSQLDirect .= "/";
479cdf0e10cSrcweir    }
480cdf0e10cSrcweir    $sSQLDirect .= "sql_direct.php";
481cdf0e10cSrcweir
482cdf0e10cSrcweir    # select(undef, undef, undef, 0.060);
483cdf0e10cSrcweir    # log_print("ExecSQL: $sSQL\n");
484cdf0e10cSrcweir    # sleep (1);
485cdf0e10cSrcweir    ($error, @aResult) = callphp(getPHPExecutable(), $sSQLDirect, singleQuote($sSQL));
486cdf0e10cSrcweir    if ($error)
487cdf0e10cSrcweir    {
488cdf0e10cSrcweir        log_print ("ExecSQL: An Error occured.\n");
489cdf0e10cSrcweir        log_print ("PHP: " . getPHPExecutable() . "\n");
490cdf0e10cSrcweir        log_print ("SQL Statement: " . singleQuote($sSQL) . "\n");
491cdf0e10cSrcweir        # exit(1);
492cdf0e10cSrcweir    }
493cdf0e10cSrcweir    # select(undef, undef, undef, 0.125);
494cdf0e10cSrcweir    # sleep (1);
495cdf0e10cSrcweir    return @aResult;
496cdf0e10cSrcweir}
497cdf0e10cSrcweir
498cdf0e10cSrcweir# ------------------------------------------------------------------------------
499cdf0e10cSrcweir# helper to call external php with popen
500cdf0e10cSrcweir# sub callexe($$$)
501cdf0e10cSrcweir# {
502cdf0e10cSrcweir#     local *IN_FILE;
503cdf0e10cSrcweir#     my $exe = shift;
504cdf0e10cSrcweir#     my $program = shift;
505cdf0e10cSrcweir#     my $sParams = shift;
506cdf0e10cSrcweir#     my $line;
507cdf0e10cSrcweir#     my $error;
508cdf0e10cSrcweir#     my @result;
509cdf0e10cSrcweir#
510cdf0e10cSrcweir#     $exe = quoteIfNeed($exe);
511cdf0e10cSrcweir#     $program = quoteIfNeed($program);
512cdf0e10cSrcweir#
513cdf0e10cSrcweir#     # print "Will send: $exe $sParams\n";
514cdf0e10cSrcweir#     # log_print("CALLEXE: $exe $program $sParams\n");
515cdf0e10cSrcweir#     if (open(IN_FILE, "$exe $program $sParams |"))
516cdf0e10cSrcweir#     {
517cdf0e10cSrcweir#         while ($line = <IN_FILE>)
518cdf0e10cSrcweir#         {
519cdf0e10cSrcweir#             chomp($line);
520cdf0e10cSrcweir#             # $line .= " ";
521cdf0e10cSrcweir#             push(@result, $line);
522cdf0e10cSrcweir#             # print "callphp output: $line\n";
523cdf0e10cSrcweir#         }
524cdf0e10cSrcweir#         close(IN_FILE);
525cdf0e10cSrcweir#         $error = errorAdaption($?);
526cdf0e10cSrcweir#     }
527cdf0e10cSrcweir#     else
528cdf0e10cSrcweir#     {
529cdf0e10cSrcweir#         print "Can't popen '$exe' with parameter: '$sParams'\n";
530cdf0e10cSrcweir#         $error = 1;
531cdf0e10cSrcweir#     }
532cdf0e10cSrcweir#     return $error, @result;
533cdf0e10cSrcweir# }
534cdf0e10cSrcweir
535cdf0e10cSrcweir1;
536