mtr_io.pl
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. # -*- cperl -*-
  2. # This is a library file used by the Perl version of mysql-test-run,
  3. # and is part of the translation of the Bourne shell script with the
  4. # same name.
  5. use strict;
  6. sub mtr_get_pid_from_file ($);
  7. sub mtr_get_opts_from_file ($);
  8. sub mtr_fromfile ($);
  9. sub mtr_tofile ($@);
  10. sub mtr_tonewfile($@);
  11. ##############################################################################
  12. #
  13. #  
  14. #
  15. ##############################################################################
  16. sub mtr_get_pid_from_file ($) {
  17.   my $file=  shift;
  18.   open(FILE,"<",$file) or mtr_error("can't open file "$file": $!");
  19.   my $pid=  <FILE>;
  20.   chomp($pid);
  21.   close FILE;
  22.   return $pid;
  23. }
  24. sub mtr_get_opts_from_file ($) {
  25.   my $file=  shift;
  26.   open(FILE,"<",$file) or mtr_error("can't open file "$file": $!");
  27.   my @args;
  28.   while ( <FILE> )
  29.   {
  30.     chomp;
  31.     #    --set-variable=init_connect=set @a='a\0c'
  32.     s/^s+//;                           # Remove leading space
  33.     s/s+$//;                           # Remove ending space
  34.     # This is strange, but we need to fill whitespace inside
  35.     # quotes with something, to remove later. We do this to
  36.     # be able to split on space. Else, we have trouble with
  37.     # options like 
  38.     #
  39.     #   --someopt="--insideopt1 --insideopt2"
  40.     #
  41.     # But still with this, we are not 100% sure it is right,
  42.     # we need a shell to do it right.
  43. #    print STDERR "n";
  44. #    print STDERR "AAA: $_n";
  45.     s/'([^'"]*)'/unspace($1,"x0a")/ge;
  46.     s/"([^'"]*)"/unspace($1,"x0b")/ge;
  47.     s/'([^'"]*)'/unspace($1,"x0a")/ge;
  48.     s/"([^'"]*)"/unspace($1,"x0b")/ge;
  49. #    print STDERR "BBB: $_n";
  50. #    foreach my $arg (/(--?w.*?)(?=s+--?w|$)/)
  51.     # FIXME ENV vars should be expanded!!!!
  52.     foreach my $arg (split(/[ t]+/))
  53.     {
  54.       $arg =~ tr/x11x0ax0b/ '"/;     # Put back real chars
  55.       # The outermost quotes has to go
  56.       $arg =~ s/^([^'"]*)'(.*)'([^'"]*)$/$1$2$3/
  57.         or $arg =~ s/^([^'"]*)"(.*)"([^'"]*)$/$1$2$3/;
  58.       $arg =~ s/\\/\/g;
  59.       $arg =~ s/${(w+)}/envsubst($1)/ge;
  60.       $arg =~ s/$(w+)/envsubst($1)/ge;
  61. #      print STDERR "ARG: $argn";
  62.       push(@args, $arg);
  63.     }
  64.   }
  65.   close FILE;
  66.   return @args;
  67. }
  68. sub envsubst {
  69.   my $string= shift;
  70.   if ( ! defined $ENV{$string} )
  71.   {
  72.     mtr_error("opt file referense $$string that is unknown");
  73.   }
  74.   return $ENV{$string};
  75. }
  76. sub unspace {
  77.   my $string= shift;
  78.   my $quote=  shift;
  79.   $string =~ s/[ t]/x11/g;
  80.   return "$quote$string$quote";
  81. }
  82. sub mtr_fromfile ($) {
  83.   my $file=  shift;
  84.   open(FILE,"<",$file) or mtr_error("can't open file "$file": $!");
  85.   my $text= join('', <FILE>);
  86.   close FILE;
  87.   $text =~ s/^s+//;                    # Remove starting space, incl newlines
  88.   $text =~ s/s+$//;                    # Remove ending space, incl newlines
  89.   return $text;
  90. }
  91. sub mtr_tofile ($@) {
  92.   my $file=  shift;
  93.   open(FILE,">>",$file) or mtr_error("can't open file "$file": $!");
  94.   print FILE join("", @_);
  95.   close FILE;
  96. }
  97. sub mtr_tonewfile ($@) {
  98.   my $file=  shift;
  99.   open(FILE,">",$file) or mtr_error("can't open file "$file": $!");
  100.   print FILE join("", @_);
  101.   close FILE;
  102. }
  103. 1;