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

symlinks as fall back for hardlinks



Hi,

I use Debian on a file system where hard links acorss directories aren't
supported. I patched dpkg this way to create a symlink if it fails to
create a hard link.

#v+
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
+++ src/archives.c        2004-12-02 17:20:06.000000000 +0
@@ -570,8 +570,15 @@
     varbufreset(&hardlinkfn);
     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);
     break;
#v-

How do you think about applying this on dpkg?

Regards, Jörg.

-- 
Das Ganze ist mehr als die Summe seiner Teile. (Aristoteles)



Reply to: