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]

