Bug#273407: [PATCH] patch for update-alternatives error handling
I looked closer at the source and all test of the error value are made
against $! instead of $|.
This patch fix all occurences i found in update-alternatives and restore
file openings error messages.
That had nothing in termn of functionality. I hope users won't be
disturbed by those new errors .
One last note . This patch may cause some postinstall script getting
broken , as before all those test on file returned 0 in case of failure.
That s an ABI change whihc may have to be discussed a bit on devel
before commit.
I don t want to have something to do with a new flood of RC bugs for a
known issue ...
I mistakenly sended those two paragraphs to 246906 (god knows why) and
cannot find how to moved them back to this bug.
If someone can please help.
I also found another perl scripts in dpkg which have the same error
"dpkg-divert". I ll retag this bug as normal and retitle it.
I guess i will have time to patch the other scripts tomorrow.
Regards
Alban
--- update-alternatives.orig 2005-01-20 02:28:44.610908162 +0100
+++ update-alternatives 2005-01-20 02:32:45.976432321 +0100
@@ -167,7 +167,7 @@
}
close(AF);
$dataread=1;
-} elsif ($! != &ENOENT) {
+} elsif ($| != &ENOENT) {
&quit("failed to open $admindir/$name: $!");
}
@@ -179,7 +179,7 @@
&pr("$name - status is $manual.");
if (defined($linkname= readlink("$altdir/$name"))) {
&pr(" link currently points to $linkname");
- } elsif ($! == &ENOENT) {
+ } elsif ($| == &ENOENT) {
&pr(" link currently absent");
} else {
&pr(" link unreadable - $!");
@@ -244,7 +244,7 @@
} else {
$state= 'unexpected';
}
-} elsif ($! == &ENOENT) {
+} elsif ($| == &ENOENT) {
$state= 'nonexistent';
} else {
$state= 'unexpected';
@@ -259,9 +259,9 @@
if ($mode eq 'auto') {
&pr("Setting up automatic selection of $name.")
if $verbosemode > 0;
- unlink("$altdir/$name.dpkg-tmp") || $! == &ENOENT ||
+ unlink("$altdir/$name.dpkg-tmp") || $| == &ENOENT ||
&quit("unable to remove $altdir/$name.dpkg-tmp: $!");
- unlink("$altdir/$name") || $! == &ENOENT ||
+ unlink("$altdir/$name") || $| == &ENOENT ||
&quit("unable to remove $altdir/$name.dpkg-tmp: $!");
$state= 'nonexistent';
$manual= 'auto';
@@ -293,7 +293,7 @@
if ($link ne $alink && $link ne '') {
&pr("Renaming $name link from $link to $alink.")
if $verbosemode > 0;
- rename_mv($link,$alink) || $! == &ENOENT ||
+ rename_mv($link,$alink) || $| == &ENOENT ||
&quit("unable to rename $link to $alink: $!");
}
$link= $alink;
@@ -315,7 +315,7 @@
if ($newslavelink ne $oldslavelink && $oldslavelink ne '') {
&pr("Renaming $sname slave link from $oldslavelink to $newslavelink.")
if $verbosemode > 0;
- rename_mv($oldslavelink,$newslavelink) || $! == &ENOENT ||
+ rename_mv($oldslavelink,$newslavelink) || $| == &ENOENT ||
&quit("unable to rename $oldslavelink to $newslavelink: $!");
}
$slavelinks[$j]= $newslavelink;
@@ -369,9 +369,9 @@
if ($i > $#versions) {
&pr("Discarding obsolete slave link $slavenames[$j] ($slavelinks[$j]).")
if $verbosemode > 0;
- unlink("$altdir/$slavenames[$j]") || $! == &ENOENT ||
+ unlink("$altdir/$slavenames[$j]") || $| == &ENOENT ||
&quit("unable to remove $slavenames[$j]: $!");
- unlink($slavelinks[$j]) || $! == &ENOENT ||
+ unlink($slavelinks[$j]) || $| == &ENOENT ||
&quit("unable to remove $slavelinks[$j]: $!");
$k= $#slavenames;
$slavenum{$slavenames[$k]}= $j;
@@ -435,22 +435,22 @@
if ($best eq '') {
&pr("Last package providing $name ($link) removed, deleting it.")
if $verbosemode > 0;
- unlink("$altdir/$name") || $! == &ENOENT ||
+ unlink("$altdir/$name") || $| == &ENOENT ||
&quit("unable to remove $altdir/$name: $!");
- unlink("$link") || $! == &ENOENT ||
+ unlink("$link") || $| == &ENOENT ||
&quit("unable to remove $altdir/$name: $!");
unlink("$admindir/$name.dpkg-new") ||
&quit("unable to remove $admindir/$name.dpkg-new: $!");
- unlink("$admindir/$name") || $! == &ENOENT ||
+ unlink("$admindir/$name") || $| == &ENOENT ||
&quit("unable to remove $admindir/$name: $!");
exit(0);
} else {
- if (!defined($linkname= readlink($link)) && $! != &ENOENT) {
+ if (!defined($linkname= readlink($link)) && $| != &ENOENT) {
&pr("warning: $link is supposed to be a symlink to $altdir/$name\n".
" (or nonexistent); however, readlink failed: $!")
if $verbosemode > 0;
} elsif ($linkname ne "$altdir/$name") {
- unlink("$link.dpkg-tmp") || $! == &ENOENT ||
+ unlink("$link.dpkg-tmp") || $| == &ENOENT ||
&quit("unable to ensure $link.dpkg-tmp nonexistent: $!");
symlink("$altdir/$name","$link.dpkg-tmp") ||
&quit("unable to make $link.dpkg-tmp a symlink to $altdir/$name: $!");
@@ -464,7 +464,7 @@
&pr("Updating $name ($link) to point to $best.")
if $verbosemode > 0;
}
- unlink("$altdir/$name.dpkg-tmp") || $! == &ENOENT ||
+ unlink("$altdir/$name.dpkg-tmp") || $| == &ENOENT ||
&quit("unable to ensure $altdir/$name.dpkg-tmp nonexistent: $!");
symlink($best,"$altdir/$name.dpkg-tmp");
}
@@ -479,12 +479,12 @@
for ($j=0; $j<=$#slavenames; $j++) {
$sname= $slavenames[$j];
$slink= $slavelinks[$j];
- if (!defined($linkname= readlink($slink)) && $! != &ENOENT) {
+ if (!defined($linkname= readlink($slink)) && $| != &ENOENT) {
&pr("warning: $slink is supposed to be a slave symlink to\n".
" $altdir/$sname, or nonexistent; however, readlink failed: $!")
if $verbosemode > 0;
} elsif ($linkname ne "$altdir/$sname") {
- unlink("$slink.dpkg-tmp") || $! == &ENOENT ||
+ unlink("$slink.dpkg-tmp") || $| == &ENOENT ||
&quit("unable to ensure $slink.dpkg-tmp nonexistent: $!");
symlink("$altdir/$sname","$slink.dpkg-tmp") ||
&quit("unable to make $slink.dpkg-tmp a symlink to $altdir/$sname: $!");
@@ -492,14 +492,14 @@
&quit("unable to install $slink.dpkg-tmp as $slink: $!");
}
$spath= $slavepath{$bestnum,$j};
- unlink("$altdir/$sname.dpkg-tmp") || $! == &ENOENT ||
+ unlink("$altdir/$sname.dpkg-tmp") || $| == &ENOENT ||
&quit("unable to ensure $altdir/$sname.dpkg-tmp nonexistent: $!");
if ($spath eq '') {
&pr("Removing $sname ($slink), not appropriate with $best.")
if $verbosemode > 0;
- unlink("$altdir/$sname") || $! == &ENOENT ||
+ unlink("$altdir/$sname") || $| == &ENOENT ||
&quit("unable to remove $altdir/$sname: $!");
- unlink("$slink") || $! == &ENOENT ||
+ unlink("$slink") || $| == &ENOENT ||
&quit("unable to remove $slink: $!");
} else {
if (defined($linkname= readlink("$altdir/$sname")) && $linkname eq $spath) {
@@ -562,7 +562,7 @@
} else {
&pr("Removing $slave ($slavelinks[$slnum]), not appropriate with $versions[$preferred].")
if $verbosemode > 0;
- unlink("$altdir/$slave") || $! == &ENOENT ||
+ unlink("$altdir/$slave") || $| == &ENOENT ||
&quit("unable to remove $altdir/$slave: $!");
}
}
@@ -598,7 +598,7 @@
} else {
&pr("Removing $slave ($slavelinks[$slnum]), not appropriate with $versions[$preferred].")
if $verbosemode > 0;
- unlink("$altdir/$slave") || $! == &ENOENT ||
+ unlink("$altdir/$slave") || $| == &ENOENT ||
&quit("unable to remove $altdir/$slave: $!");
}
}
@@ -610,7 +610,7 @@
print(AF "$_[0]\n") || &quit("error writing stdout: $!");
}
sub gl {
- $!=0; $_= <AF>;
+ $|=0; $_= <AF>;
length($_) || &quit("error or eof reading $admindir/$name for $_[0] ($!)");
s/\n$// || &badfmt("missing newline after $_[0]");
$_;
Reply to: