* Ported to Linux's Second Extended File System as part of the
* dump and restore backup suit
* Remy Card <card@Linux.EU.Org>, 1994-1997
- * Stelian Pop <pop@cybercable.fr>, 1999
- *
+ * Stelian Pop <pop@cybercable.fr>, 1999-2000
*/
/*
*/
#ifndef lint
-#if 0
-static char sccsid[] = "@(#)utilities.c 8.5 (Berkeley) 4/28/95";
-#endif
static const char rcsid[] =
- "$Id: utilities.c,v 1.3 1999/10/11 12:59:21 stelian Exp $";
+ "$Id: utilities.c,v 1.8 2000/02/08 12:22:43 stelian Exp $";
#endif /* not lint */
#include <sys/param.h>
newnode(struct entry *np)
{
char *cp;
-
if (np->e_type != NODE)
badentry(np, "newnode: not a node");
cp = myname(np);
ret = link(existing, new);
chflags(existing, s.st_flags);
}
+#else
+ unsigned long s;
+
+ /*
+ * Most likely, the immutable or append-only attribute
+ * is set. Clear the attributes and try again.
+ */
+ if (fgetflags (existing, &s) != -1 &&
+ fsetflags (existing, 0) != -1) {
+ ret = link(existing, new);
+ fsetflags(existing, s);
+ }
#endif
if (ret < 0) {
warn("warning: cannot create hard link %s->%s",