All pastes #950089 Raw Edit

Someone

public text v1 · immutable
·published 2008-03-20 09:49 UTC
rendered paste body
sub gst_replace_ini
{
  open(DEBUG, ">/tmp/replace_ini.dbg");

  my ($file, $section, $var, $value) = @_;
  my ($buff, $i, $found_flag, $ret);
  my ($pre_space, $post_comment, $sec_save);

  print DEBUG "File : ".$file." Section :".$section." Var : ".var." Value : ".$value."\n";
 
 
  &gst_report_enter ();
  &gst_report ("replace_ini", $var, $section, $file);
  print DEBUG "gst_report returns : File : ".$file." Section :".$section." Var : ".var."\n";
 
  $buff = &gst_file_buffer_load ($file);
  print DEBUG "file shoud be unchanged here : ".$file."\n";

  &gst_file_buffer_join_lines ($buff);
  $found_flag = 0;
 
  foreach $i (@$buff)
  {
    $pre_space = $post_comment = "";
    
    chomp $i;
    $pre_space = $1 if $i =~ s/^([ \t]+)//;
    $post_comment = $1 if $i =~ s/([ \t]*[\#;].*)//;
    
    if ($i ne "")
    {
      if ($i =~ /\[$section\]/i)
      {
        $i =~ s/(\[$section\][ \t]*)//i;
        $sec_save = $1;
        $found_flag = 1;
	print DEBUG "sec_save : " .$sec_save."\n";
      }
 
      if ($found_flag)
      {
        if ($i =~ /\[[^\]]+\]/)
        {
          $i = "$var = $value\n$i" if ($value ne "");
          $found_flag = 2;
        }
        
        if ($i =~ /^$var[ \t]*=/i)
        {
          if ($value ne "")
          {
            $i =~ s/^($var[ \t]*=[ \t]*).*/$1$value/i;
          }
          else
          {
            $i = "";
          }
          $found_flag = 2;
        }
	print DEBUG "found_flag : ".$found_flag."\n";
      }
      print DEBUG "!!! NOT found_flag at all !!! \n";
    }
    
    if ($found_flag && $sec_save ne "")
    {
      $i = $sec_save . $i;
      $sec_save = "";
    }
    
    $i = $pre_space . $i . $post_comment . "\n";
    last if $found_flag == 2;
  }
 
  push @$buff, "\n[$section]\n" if (!$found_flag);
  push @$buff, "$var = $value\n" if ($found_flag < 2 && $value ne "");
 
  &gst_file_buffer_clean ($buff);
  $ret = &gst_file_buffer_save ($buff, $file);
  print DEBUG "gst_file_buffer_save : File : ".$file." Section :".$section." Var : ".var."\n";

  &gst_report_leave ();
  print DEBUG "gst_report_leave : File : ".$file." Section :".$section." Var : ".var."\n";

  return $ret;
}