[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#42559: [PATCH] fix cross-device rename



========
--- update-alternatives.orig	Fri Sep 24 23:17:23 1999
+++ update-alternatives	Fri Sep 24 23:17:09 1999
@@ -231,7 +231,7 @@
 if ($mode eq 'install') {
     if ($link ne $alink && $link ne '') {
         &pr("Renaming $name link from $link to $alink.");
-        rename($link,$alink) || $! == &ENOENT ||
+        rename_mv($link,$alink) || $! == &ENOENT ||
             &quit("unable to rename $link to $alink: $!");
     }
     $link= $alink;
@@ -252,7 +252,7 @@
             &quit("slave link name $newslavelink duplicated");
         if ($newslavelink ne $oldslavelink && $oldslavelink ne '') {
             &pr("Renaming $sname slave link from $oldslavelink to $newslavelink.");
-            rename($oldslavelink,$newslavelink) || $! == &ENOENT ||
+            rename_mv($oldslavelink,$newslavelink) || $! == &ENOENT ||
                 &quit("unable to rename $oldslavelink to $newslavelink: $!");
         }
         $slavelinks[$j]= $newslavelink;
@@ -308,7 +308,7 @@
 } else {
     if ($state eq 'expected-inprogress') {
         &pr("Recovering from previous failed update of $name ...");
-        rename("$altdir/$name.dpkg-tmp","$altdir/$name") ||
+        rename_mv("$altdir/$name.dpkg-tmp","$altdir/$name") ||
             &quit("unable to rename $altdir/$name.dpkg-tmp to $altdir/$name: $!");
         $state= 'expected';
     }
@@ -365,7 +365,7 @@
                 &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: $!");
-            rename("$link.dpkg-tmp",$link) ||
+            rename_mv("$link.dpkg-tmp",$link) ||
                 &quit("unable to install $link.dpkg-tmp as $link: $!");
         }
         if (defined($linkname= readlink("$altdir/$name")) && $linkname eq $best) {
@@ -379,11 +379,11 @@
     }
 }
 
-rename("$admindir/$name.dpkg-new","$admindir/$name") ||
+rename_mv("$admindir/$name.dpkg-new","$admindir/$name") ||
     &quit("unable to rename $admindir/$name.dpkg-new to $admindir/$name: $!");
 
 if ($manual eq 'auto') {
-    rename("$altdir/$name.dpkg-tmp","$altdir/$name") ||
+    rename_mv("$altdir/$name.dpkg-tmp","$altdir/$name") ||
         &quit("unable to install $altdir/$name.dpkg-tmp as $altdir/$name");
     for ($j=0; $j<=$#slavenames; $j++) {
         $sname= $slavenames[$j];
@@ -396,7 +396,7 @@
                 &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: $!");
-            rename("$slink.dpkg-tmp",$slink) ||
+            rename_mv("$slink.dpkg-tmp",$slink) ||
                 &quit("unable to install $slink.dpkg-tmp as $slink: $!");
         }
         $spath= $slavepath{$bestnum,$j};
@@ -414,7 +414,7 @@
             }
             symlink("$spath","$altdir/$sname.dpkg-tmp") ||
                 &quit("unable to make $altdir/$sname.dpkg-tmp a symlink to $spath: $!");
-            rename("$altdir/$sname.dpkg-tmp","$altdir/$sname") ||
+            rename_mv("$altdir/$sname.dpkg-tmp","$altdir/$sname") ||
                 &quit("unable to install $altdir/$sname.dpkg-tmp as $altdir/$sname: $!");
         }
     }
@@ -434,5 +434,7 @@
 sub badfmt {
     &quit("internal error: $admindir/$name corrupt: $_[0]");
 }
-
+sub rename_mv {
+	return (rename($_[0], $_[1]) || (system(("mv", $_[0], $_[1])) == 0));
+}
 exit(0);
========

----BEGIN GEEK CODE BLOCK----
Version: 3.12
GCS d- s: a-- c+++ UL++++ P+ L++++ !E W+ M o+ K- W--- !O M- !V PS--
PE++ Y+ PGP++ t* 5++ X+ tv b+ D++ G e h*! !r z?
-----END GEEK CODE BLOCK-----
----BEGIN PGP INFO----
Adam Heath <doogie@debian.org>        Finger Print | KeyID
67 01 42 93 CA 37 FB 1E    63 C9 80 1D 08 CF 84 0A | DE656B05 PGP
AD46 C888 F587 F8A3 A6DA  3261 8A2C 7DC2 8BD4 A489 | 716280FA GPG
-----END PGP INFO-----


Reply to: