When backing up the .dpkg-new file, make a hardlink backup and
then fall through to the "deleting .dpkg-new because it is not to
be used" case.  This is messier than a true rename, but it
creates some flexibility by allowing us to perform some
operations between the two steps in the future.

Signed-off-by: Jonathan Nieder <[email protected]>
---
 src/configure.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/configure.c b/src/configure.c
index 6c9b7da..2764729 100644
--- a/src/configure.c
+++ b/src/configure.c
@@ -170,12 +170,17 @@ deferred_configure_conffile(struct pkginfo *pkg, struct 
conffile *conff)
                        warning(_("%s: failed to remove old backup '%.250s': 
%s"),
                                pkg->name, cdr2.buf, strerror(errno));
                strcpy(cdrrest, DPKGDISTEXT);
+               if (unlink(cdr.buf) && errno != ENOENT)
+                       warning(_("%s: failed to remove '%.250s' "
+                               "(before overwrite): %s"),
+                               pkg->name, cdr.buf, strerror(errno));
                trig_file_activate(usenode, pkg);
                strcpy(cdr2rest, DPKGNEWEXT);
-               if (rename(cdr2.buf, cdr.buf))
-                       warning(_("%s: failed to rename '%.250s' to '%.250s': 
%s"),
+               if (link(cdr2.buf, cdr.buf))
+                       warning(_("%s: failed to link '%.250s' "
+                               "to '%.250s': %s"),
                                pkg->name, cdr2.buf, cdr.buf, strerror(errno));
-               break;
+               /* Fall through. */
        case cfo_keep:
                strcpy(cdr2rest, DPKGNEWEXT);
                if (unlink(cdr2.buf))
-- 
1.6.5.2


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]

Reply via email to