Zitat von makki
Beitrag anzeigen
Geändert haben sich nur zwei Zeilen (my $key=''; statt my $key=undef; und if(defined $key) statt if($key) ).
Ich poste dennoch nochmal den gesamten Patch.
Grüße, Fry
Code:
--- wiregated.pl.mod-2012-04-24 2012-04-28 11:04:31.000000000 +0200
+++ wiregated.pl 2012-04-30 23:52:41.000000000 +0200
@@ -31,7 +31,8 @@
use IO::Socket;
use IO::Select;
use FileHandle;
-use Config::Std { def_sep => '=', read_config => 'my_read_cfg', write_config => 'my_write_cfg' }; #FIXME: 1244kB
+sub my_read_cfg;
+sub my_write_cfg;
# fork daemon
use Proc::Daemon;
Proc::Daemon::Init unless $opts{d};
@@ -95,7 +96,6 @@
my %wg_config;
my %eibgaconf;
-my %wg_config_local;
my %wg_state;
my @a_owdev_buttons;
my @a_owdev_pio;
@@ -1126,8 +1126,7 @@
# (re)read config
if ((stat($owdev_cfgfile))[9] > $lastreadtime) {
if (-e $owdev_cfgfile) {
- my_read_cfg $owdev_cfgfile => %wg_config_local;
- %wg_config = %wg_config_local;
+ my_read_cfg $owdev_cfgfile, \%wg_config;
$lastreadtime = time();
while( my ($k, $v) = each(%wg_config) ) {
DEBUG("CONFIG: Sensor $k Type $wg_config{$k}{'type'} !");
@@ -1152,7 +1151,7 @@
}
}
if (-e '/etc/wiregate/eibga.conf') {
- my_read_cfg '/etc/wiregate/eibga.conf' => %eibgaconf;
+ my_read_cfg '/etc/wiregate/eibga.conf', \%eibgaconf;
}
} else {
LOGDIE("unable to read config $owdev_cfgfile");
@@ -1342,7 +1341,7 @@
if($wg_config{''}{'eib_logging'} eq "1") { close FILE_EIBLOG; }
$xpl->send_hbeat_end() if defined $xpl;
# save state
- my_write_cfg %wg_state, $owdev_statefile;
+ my_write_cfg \%wg_state, $owdev_statefile;
threads->exit();
};
$SIG{KILL} = sub {
@@ -1350,19 +1349,19 @@
if($wg_config{''}{'eib_logging'} eq "1") { close FILE_EIBLOG; }
$xpl->send_hbeat_end() if defined $xpl;
# save state
- my_write_cfg %wg_state, $owdev_statefile;
+ my_write_cfg \%wg_state, $owdev_statefile;
threads->exit();
};
# Read state
if (-e $owdev_statefile) {
- eval { my_read_cfg $owdev_statefile => %wg_state; };
+ eval { my_read_cfg $owdev_statefile, \%wg_state; };
if ($@) { #statefile trashed, recreate
- my_write_cfg %wg_state, $owdev_statefile;
+ my_write_cfg \%wg_state, $owdev_statefile;
INFO("statefile unreadable $owdev_statefile re-created");
}
} else { # create state file
- my_write_cfg %wg_state, $owdev_statefile;
+ my_write_cfg \%wg_state, $owdev_statefile;
INFO("statefile $owdev_statefile created");
}
@@ -1425,7 +1424,7 @@
# save state
if (time() > $laststatesaveime+30) {
$laststatesaveime = time();
- my_write_cfg %wg_state, $owdev_statefile;
+ my_write_cfg \%wg_state, $owdev_statefile;
DEBUG("statefile $owdev_statefile saved");
}
@@ -1475,7 +1474,7 @@
}
DEBUG("Thread ow2eib normal exit;");
# save state
-my_write_cfg %wg_state, $owdev_statefile;
+my_write_cfg \%wg_state, $owdev_statefile;
$xpl->send_hbeat_end() if defined $xpl;
} # END ow2eib-thread
@@ -2269,6 +2268,98 @@
return @ret;
}
+
+sub my_read_cfg
+{
+ my $cfgfile=shift;
+ my $cfghash=shift;
+ %{$cfghash}=();
+
+ open CONF, "<$cfgfile" || die "Could not open $cfgfile for reading";
+ $/="\n";
+
+ my $record={};
+ my $key='';
+
+ while(<CONF>)
+ {
+ if(/^\s*\[\s*(.+?)\s*\]\s*$/)
+ {
+ my $newkey=$1;
+
+ if(defined $key) # flush last record
+ {
+ if(defined $record->{name} && $cfgfile=~/eibga/)
+ {
+ $record->{ga}=$key;
+ $cfghash->{$record->{name}}=$record;
+
+ # specific to my GA scheme (Fry)
+ $record->{name}=~/^\s*(\S+)/;
+ $record->{short}=$1;
+ $record->{short}="ZV_$1" if $record->{name}=~/^Zeitversand.*(Uhrzeit|Datum)/; # short versions of "Zeitversand"
+ $cfghash->{$record->{short}}=$record;
+ # end of specific part
+ }
+ $cfghash->{$key}=$record;
+ }
+
+ # start new record
+ $record={};
+ $key=$newkey;
+ }
+ elsif(/^\s*(.+?)\s*\=\s*(.*?)\s*$/)
+ {
+ $record->{$1} = $2;
+ }
+ }
+ close CONF;
+
+ if($key) # flush last record
+ {
+ if(defined $record->{name} && $cfgfile=~/eibga/)
+ {
+ $record->{ga}=$key;
+ $cfghash->{$record->{name}}=$record;
+
+ # specific to my GA scheme (Fry)
+ $record->{name}=~/^\s*(\S+)/;
+ $record->{short}=$1;
+ $record->{short}="ZV_$1" if $record->{name}=~/^Zeitversand.*(Uhrzeit|Datum)/; # short versions of "Zeitversand"
+ $cfghash->{$record->{short}}=$record;
+ # end of specific part
+ }
+ $cfghash->{$key}=$record;
+ }
+}
+
+
+sub my_write_cfg
+{
+ my $cfghash=shift;
+ my $cfgfile=shift;
+
+ open CONF, ">$cfgfile" || die "Could not open $cfgfile for writing";
+
+ for my $s (keys %{$cfghash})
+ {
+ next if $cfgfile=~/eibga/ && $s!~/^[\'\/0-9]+$/;
+
+ print CONF "[$s]\n";
+
+ for my $k (keys %{$cfghash->{$s}})
+ {
+ print CONF "\t$k = $cfghash->{$s}{$k}\n";
+ }
+ }
+
+ close CONF;
+}
+
+
+
+
+
=pod
=head1 NAME



Kommentar