summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Portage.pm13
-rw-r--r--ufed.pl.in43
2 files changed, 37 insertions, 19 deletions
diff --git a/Portage.pm b/Portage.pm
index dc7b964..e9edaab 100644
--- a/Portage.pm
+++ b/Portage.pm
@@ -953,14 +953,14 @@ sub _read_sh {
for(;;) {
/\G$BLANK/gc;
last if ((pos || 0) == (length || 0));
- /\G$IDENT/gc or die;
+ /\G$IDENT/gc or die "Empty file detected, no identifier found.";
my $name = $1;
/\G$BLANK/gc;
if($name ne 'source') {
- /\G$ASSIG/gc or die;
+ /\G$ASSIG/gc or die "Bare keyword $name detected.";
/\G$BLANK/gc;
}
- die if pos == length;
+ pos == length and die "Bumped into unexpected EOF after $name.";
my $value = '';
for(;;) {
if(/\G$UQVAL/gc || /\G$DQVAL/gc) {
@@ -989,17 +989,18 @@ sub _read_sh {
substr($_, pos, 0) = do {
local $/;
my $text = <$f>;
- die if not defined $text;
+ defined $text or die "Error parsing $value";
$text;
};
pos = $pos;
- close $f or die "Unable to open $value\n$!\n";
+ close $f or die "Unable to close $value\n$!\n";
} else {
$env{$name} = $value;
}
}
};
- die "Parse error in $fname\n" if $@;
+ defined($@) and length($@) and
+ die "Parse error in $fname\n - Error: \"$@\"\n";
}
_merge_env(\%env);
return %env if wantarray;
diff --git a/ufed.pl.in b/ufed.pl.in
index be20b02..37f7957 100644
--- a/ufed.pl.in
+++ b/ufed.pl.in
@@ -213,31 +213,36 @@ sub save_flags {
my $line = substr($_, $linestart, pos()-$linestart);
$line !~ /[^ \t]/;
};
- /\G$IDENT/gc or die;
+ /\G$IDENT/gc or die "No identifier found to start with.";
my $name = $1;
/\G$BLANK/gc;
if($name ne 'source') {
- /\G$ASSIG/gc or die;
- /\G$BLANK/gc;
+ /\G$ASSIG/gc or die "Identifier $name without assignement detected.";
+ /\G$BLANK/gc;
} else {
$sourcing = 1;
}
- die if pos == length;
+ pos == length and die "Bumped into early EOF.";
if($name ne 'USE') {
- /\G(?:$UQVAL|$SQVAL|$DQVAL)+/gc or die;
+ /\G(?:$UQVAL|$SQVAL|$DQVAL)+/gc or die "Blank assignement for $name detected.";
} else {
my $start = pos;
- /\G(?:$BNUQV|$SQVAL|$BNDQV)+/gc or die;
+ m/\G(?:$BNUQV|$SQVAL|$BNDQV)+/gc or die "Empty USE assignement detected.";
my $end = pos;
+
# save whether user uses backslash-newline
my $bsnl = defined $1 || defined $2;
+
# start of the line is one past the last newline; also handles first line
my $linestart = 1+rindex $_, "\n", $start-1;
+
# everything on the current line before the USE flags, plus one for the "
my $line = substr($_, $linestart, $start-$linestart).' ';
+
# only indent if USE starts a line
my $blank = $flagatstartofline ? $line : "";
$blank =~ s/[^ \t]/ /g;
+
# word wrap
if(@flags != 0) {
my $length = 0;
@@ -251,10 +256,12 @@ sub save_flags {
}
}
my $blanklength = $blank ne '' ? $length : 0;
+
# new line, using backslash-newline if the user did that
my $nl = ($bsnl ? " \\\n" : "\n").$blank;
my $linelength = $bsnl ? 76 : 78;
my $flag = $flags[0];
+
if($blanklength != 0 || length $flag <= $linelength) {
$flags = $flag;
$length += length $flag;
@@ -272,16 +279,22 @@ sub save_flags {
}
}
}
+
# replace the current USE flags with the modified ones
substr($_, $start, $end-$start) = "\"$flags\"";
+
# and have the next search start after our new flags
pos = $start + 2 + length $flags;
+
# and end this
undef $flags;
last;
}
}
- if(defined $flags) { # if we didn't replace the flags, tack them after the last #USE= or at the end
+
+ if(defined $flags) {
+
+ # if we didn't replace the flags, tack them after the last #USE= or at the end
$flags = '';
if(@flags != 0) {
$flags = $flags[0];
@@ -297,21 +310,23 @@ sub save_flags {
}
}
substr($_, $ucs, $uce-$ucs) = "\nUSE=\"$flags\"\n";
- } else { # if we replaced the flags, delete any further overrides
+ } else {
+
+ # if we replaced the flags, delete any further overrides
for(;;) {
my $start = pos;
/\G$BLANK/gc;
last if pos == length;
- /\G$IDENT/gc or die;
+ /\G$IDENT/gc or die "Identifier detection failed.";
my $name = $1;
/\G$BLANK/gc;
if($name ne 'source') {
- /\G$ASSIG/gc or die;
- /\G$BLANK/gc;
+ /\G$ASSIG/gc or die "Identifier $name without assignement detected.";
+ /\G$BLANK/gc;
} else {
$sourcing = 1;
}
- /\G(?:$UQVAL|$SQVAL|$DQVAL)+/gc or die;
+ m/\G(?:$UQVAL|$SQVAL|$DQVAL)+/gc or die "Empty assignement for $name detected.";
my $end = pos;
if($name eq 'USE') {
substr($_, $start, $end-$start) = '';
@@ -320,7 +335,9 @@ sub save_flags {
}
}
};
- die "Parse error when writing make.conf - did you modify it while ufed was running?\n" if $@;
+ defined($@) and length($@) and die "\nParse error when writing make.conf"
+ . " - did you modify it while ufed was running?\n"
+ . " - Error: \"$@\"\n";
print STDERR <<EOF if $sourcing;
Warning: source command found in $makeconf_name. Flags may