X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=scripts%2Fconfig.pl;h=53b8f11025f75d2ef2850e7a986db13dcd48cb6c;hb=2e57c3227c8343f43dd836d80e71843c816eb837;hp=a45253729cc48fa4d8cfb8c00ea7dcd9df36b0fa;hpb=ed01170dfed7c661529740f0e4756aa3f633d7bb;p=openwrt.git diff --git a/scripts/config.pl b/scripts/config.pl index a45253729c..53b8f11025 100755 --- a/scripts/config.pl +++ b/scripts/config.pl @@ -18,12 +18,12 @@ sub load_config($) { open FILE, "$file" or die "can't open file"; while () { chomp; - /^CONFIG_(.+)=(.+)/ and do { + /^CONFIG_(.+?)=(.+)/ and do { $config{$1} = $2; next; }; - /^# CONFIG_(.+) is not set/ and do { - $config{$1} = -1; + /^# CONFIG_(.+?) is not set/ and do { + $config{$1} = "#undef"; next; }; /^#/ and next; @@ -49,15 +49,17 @@ sub config_and($$) { } -sub config_add($$) { +sub config_add($$$) { my $cfg1 = shift; my $cfg2 = shift; + my $mod_plus = shift; my %config; for ($cfg1, $cfg2) { my %cfg = %$_; foreach my $config (keys %cfg) { + next if $mod_plus and $config{$config} and $config{$config} eq "y"; $config{$config} = $cfg{$config}; } } @@ -91,7 +93,7 @@ sub config_sub($$) { sub print_cfgline($$) { my $name = shift; my $val = shift; - if ($val eq '-1') { + if ($val eq '#undef') { print "# CONFIG_$name is not set\n"; } else { print "CONFIG_$name=$val\n"; @@ -123,7 +125,11 @@ sub parse_expr($) { } elsif ($arg =~ /^\+/) { my $arg1 = parse_expr($pos); my $arg2 = parse_expr($pos); - return config_add($arg1, $arg2); + return config_add($arg1, $arg2, 0); + } elsif ($arg =~ /^m\+/) { + my $arg1 = parse_expr($pos); + my $arg2 = parse_expr($pos); + return config_add($arg1, $arg2, 1); } elsif ($arg eq '>') { my $arg1 = parse_expr($pos); my $arg2 = parse_expr($pos);