|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [OSSTEST PATCH 10/32] readglobalconfig: Break out $readcfg as a sub
And make it use anonymous filehandles, and be able to not tolerate
ENOENT. This is preparation for making it recursive (`Include').
No functional change.
Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
---
Osstest.pm | 75 +++++++++++++++++++++++++++++++++---------------------------
1 file changed, 41 insertions(+), 34 deletions(-)
diff --git a/Osstest.pm b/Osstest.pm
index aaaaf7a..8e63389 100644
--- a/Osstest.pm
+++ b/Osstest.pm
@@ -106,43 +106,50 @@ sub readglobalconfig () {
my $cfgfiles = $ENV{'OSSTEST_CONFIG'} ||
"$ENV{'HOME'}/.xen-osstest/config";
- foreach my $cfgfile (split /\:/, $cfgfiles) {
- if (!open C, '<', "$cfgfile") {
- die "$cfgfile $!" unless $!==&ENOENT;
- } else {
- while (<C>) {
- die "missing newline" unless chomp;
- s/^\s*//;
- s/\s+$//;
- next if m/^\#/;
- next unless m/\S/;
- if (m/^($cfgvar_re)\s+(\S.*)$/) {
- $c{$1} = $2;
- } elsif (m/^($cfgvar_re)=\s*\<\<(\'?)(.*)\2\s*$/) {
- my ($vn,$qu,$delim) = ($1,$2,$3);
- my $val = '';
- $!=0; while (<C>) {
- last if $_ eq "$delim\n";
- $val .= $_;
- }
- die $! unless length $_;
- die unless !length $val || $val =~ m/\n$/;
- if ($qu eq '') {
- my $reconstruct =
- "\$val = <<${qu}${delim}${qu}; 1;\n".
- "${val}${delim}\n";
- eval $reconstruct or
- die "$1 here doc ($reconstruct) $@";
- }
- $c{$vn} = $val;
- } elsif (m/^($cfgvar_re)=(.*)$/) {
- eval "\$c{$1} = ( $2 ); 1;" or die "$1 parsed val ($2) $@";
- } else {
- die "bad syntax";
+ my $readcfg;
+ $readcfg = sub ($$) {
+ my ($cfgfile,$enoent_ok) = @_;
+ my $fh = new IO::File $cfgfile, '<';
+ if (!$fh) {
+ die "$cfgfile $!" unless $enoent_ok && $!==&ENOENT;
+ return;
+ }
+ while (<$fh>) {
+ die "missing newline" unless chomp;
+ s/^\s*//;
+ s/\s+$//;
+ next if m/^\#/;
+ next unless m/\S/;
+ if (m/^($cfgvar_re)\s+(\S.*)$/) {
+ $c{$1} = $2;
+ } elsif (m/^($cfgvar_re)=\s*\<\<(\'?)(.*)\2\s*$/) {
+ my ($vn,$qu,$delim) = ($1,$2,$3);
+ my $val = '';
+ $!=0; while (<$fh>) {
+ last if $_ eq "$delim\n";
+ $val .= $_;
+ }
+ die $! unless length $_;
+ die unless !length $val || $val =~ m/\n$/;
+ if ($qu eq '') {
+ my $reconstruct =
+ "\$val = <<${qu}${delim}${qu}; 1;\n".
+ "${val}${delim}\n";
+ eval $reconstruct or
+ die "$1 here doc ($reconstruct) $@";
}
+ $c{$vn} = $val;
+ } elsif (m/^($cfgvar_re)=(.*)$/) {
+ eval "\$c{$1} = ( $2 ); 1;" or die "$1 parsed val ($2) $@";
+ } else {
+ die "bad syntax";
}
- close C or die "$cfgfile $!";
}
+ close $fh or die "$cfgfile $!";
+ };
+
+ foreach my $cfgfile (split /\:/, $cfgfiles) {
+ $readcfg->($cfgfile, 1);
}
# dynamic default config settings
--
1.7.10.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |