[tools] fix segfault when using the maxlen argument (#4359)
[openwrt.git] / scripts / kconfig.pl
index 53b8f11..c76e297 100755 (executable)
@@ -9,7 +9,8 @@
 use warnings;
 use strict;
 
-my @arg = @ARGV;
+my @arg;
+my $PREFIX = "CONFIG_";
 
 sub load_config($) {
        my $file = shift;
@@ -18,16 +19,16 @@ sub load_config($) {
        open FILE, "$file" or die "can't open file";
        while (<FILE>) {
                chomp;
-               /^CONFIG_(.+?)=(.+)/ and do {
+               /^$PREFIX(.+?)=(.+)/ and do {
                        $config{$1} = $2;
                        next;
                };
-               /^# CONFIG_(.+?) is not set/ and do {
+               /^# $PREFIX(.+?) is not set/ and do {
                        $config{$1} = "#undef";
                        next;
                };
                /^#/ and next;
-               /^(.+)$/ and print "WARNING: can't parse line: $1\n";
+               /^(.+)$/ and warn "WARNING: can't parse line: $1\n";
        }
        return \%config;
 }
@@ -72,7 +73,7 @@ sub config_diff($$) {
        my %config;
        
        foreach my $config (keys %$cfg2) {
-               if (!$cfg1->{$config} or $cfg1->{$config} ne $cfg2->{$config}) {
+               if (!defined($cfg1->{$config}) or $cfg1->{$config} ne $cfg2->{$config}) {
                        $config{$config} = $cfg2->{$config};
                }
        }
@@ -93,10 +94,10 @@ sub config_sub($$) {
 sub print_cfgline($$) {
        my $name = shift;
        my $val = shift;
-       if ($val eq '#undef') {
-               print "# CONFIG_$name is not set\n";
+       if ($val eq '#undef' or $val eq 'n') {
+               print "# $PREFIX$name is not set\n";
        } else {
-               print "CONFIG_$name=$val\n";
+               print "$PREFIX$name=$val\n";
        }
 }
 
@@ -143,6 +144,18 @@ sub parse_expr($) {
        }
 }
 
+while (@ARGV > 0 and $ARGV[0] =~ /^-\w+$/) {
+       my $cmd = shift @ARGV;
+       if ($cmd =~ /^-n$/) {
+               $PREFIX = "";
+       } elsif ($cmd =~ /^-p$/) {
+               $PREFIX = shift @ARGV;
+       } else {
+               die "Invalid option: $cmd\n";
+       }
+}
+@arg = @ARGV;
+
 my $pos = 0;
 dump_config(parse_expr(\$pos));
 die "Parse error" if ($arg[$pos]);
This page took 0.025512 seconds and 4 git commands to generate.