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

fallback if creating hard links fail (patch)


I've a filesystem that do not support hard links across directories.
Currently we solve the problems while the dpkg unpack phase with this

diff -ur dpkg-1.10.25/main/archives.c dpkg-1.10.25.patched/main/archives.c
--- dpkg-1.10.25/main/archives.c        2004-11-11 21:10:03.000000000 +0100
+++ archives.c        2004-12-02 17:20:06.000000000 +0
@@ -570,8 +570,15 @@
     varbufaddstr(&hardlinkfn,instdir); varbufaddc(&hardlinkfn,'/');
     varbufaddstr(&hardlinkfn,ti->LinkName); varbufaddc(&hardlinkfn,0);
-    if (link(hardlinkfn.buf,fnamenewvb.buf))
-      ohshite(_("error creating hard link `%.255s'"),ti->Name);
+    if (link(hardlinkfn.buf,fnamenewvb.buf)) {
+       if (errno != EXDEV)
+        ohshite(_("error creating hard link `%.255s'"),ti->Name);
+       fprintf(stderr, "dpkg: warning - creation of hardlink failed %s -> %s"
+               " - making symlink\n", hardlinkfn.buf, fnamenewvb.buf);
+       if (symlink(hardlinkfn.buf,fnamenewvb.buf))
+        ohshite(_("error creating symbolic link `%.255s'"),ti->Name);
+    }
     debug(dbg_eachfiledetail,"tarobject HardLink");
     newtarobject_allmodes(fnamenewvb.buf,ti, nifd->namenode->statoverride);

It's a simple fallback to symlinks if hard links fail. Is it possible to
add this patch to the debian package?

Bye, Jörg.
Richard is only to blame for his inability to spell /dev/disk correctly.
Albert Cahalan, <1072236794.1743.244.camel@cube>, lkml

Reply to: