X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=restore%2Futilities.c;h=04be010693e827c8f6d75c799b5e924055d2a85d;hb=42bcc624fe21059d5e550e90befb3553c17e2858;hp=7c3bcd8b1dcbeb183fee5af349557a719ebd4aa6;hpb=ddd2ef55b78a62c4bc3daad18bef8a90e85a2052;p=dump.git diff --git a/restore/utilities.c b/restore/utilities.c index 7c3bcd8..04be010 100644 --- a/restore/utilities.c +++ b/restore/utilities.c @@ -2,8 +2,8 @@ * Ported to Linux's Second Extended File System as part of the * dump and restore backup suit * Remy Card , 1994-1997 - * Stelian Pop , 1999 - * + * Stelian Pop , 1999-2000 + * Stelian Pop - AlcĂ´ve , 2000 */ /* @@ -40,11 +40,8 @@ */ #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.10 2000/12/04 15:43:17 stelian Exp $"; #endif /* not lint */ #include @@ -157,7 +154,6 @@ void newnode(struct entry *np) { char *cp; - if (np->e_type != NODE) badentry(np, "newnode: not a node"); cp = myname(np); @@ -249,6 +245,18 @@ linkit(char *existing, char *new, int type) 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",