Salvage the `create parent directories and try again' path which is
removed by the previous commit.
This commit is contained in:
parent
bd789f7eba
commit
467ca7e2c8
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: file_subs.c,v 1.49 2004/06/26 13:28:09 grant Exp $ */
|
||||
/* $NetBSD: file_subs.c,v 1.50 2004/07/02 07:17:17 enami Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992 Keith Muller.
|
||||
|
@ -42,7 +42,7 @@
|
|||
#if 0
|
||||
static char sccsid[] = "@(#)file_subs.c 8.1 (Berkeley) 5/31/93";
|
||||
#else
|
||||
__RCSID("$NetBSD: file_subs.c,v 1.49 2004/06/26 13:28:09 grant Exp $");
|
||||
__RCSID("$NetBSD: file_subs.c,v 1.50 2004/07/02 07:17:17 enami Exp $");
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
|
@ -407,7 +407,7 @@ node_creat(ARCHD *arcn)
|
|||
file_mode = arcn->sb.st_mode & FILEBITS(arcn->type == PAX_DIR);
|
||||
|
||||
for (;;) {
|
||||
switch(arcn->type) {
|
||||
switch (arcn->type) {
|
||||
case PAX_DIR:
|
||||
/*
|
||||
* If -h (or -L) was given in tar-mode, follow the
|
||||
|
@ -421,7 +421,8 @@ node_creat(ARCHD *arcn)
|
|||
sizeof target - 1);
|
||||
if (len == -1) {
|
||||
syswarn(0, errno,
|
||||
"cannot follow symlink %s in chain for %s",
|
||||
"cannot follow symlink %s "
|
||||
"in chain for %s",
|
||||
nm, arcn->name);
|
||||
res = -1;
|
||||
goto badlink;
|
||||
|
@ -454,7 +455,7 @@ badlink:
|
|||
tty_warn(0,
|
||||
"%s skipped. Sockets cannot be copied or extracted",
|
||||
nm);
|
||||
return(-1);
|
||||
return (-1);
|
||||
case PAX_SLK:
|
||||
res = symlink(arcn->ln_name, nm);
|
||||
break;
|
||||
|
@ -468,7 +469,7 @@ badlink:
|
|||
*/
|
||||
tty_warn(0, "%s has an unknown file type, skipping",
|
||||
nm);
|
||||
return(-1);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -483,15 +484,20 @@ badlink:
|
|||
* we failed to make the node
|
||||
*/
|
||||
oerrno = errno;
|
||||
if ((ign = unlnk_exist(nm, arcn->type)) < 0)
|
||||
return(-1);
|
||||
|
||||
if (++pass <= 1)
|
||||
switch (pass++) {
|
||||
case 0:
|
||||
if ((ign = unlnk_exist(nm, arcn->type)) < 0)
|
||||
return (-1);
|
||||
continue;
|
||||
|
||||
if (nodirs || chk_path(nm,arcn->sb.st_uid,arcn->sb.st_gid) < 0) {
|
||||
syswarn(1, oerrno, "Cannot create %s", nm);
|
||||
return(-1);
|
||||
case 1:
|
||||
if (nodirs ||
|
||||
chk_path(nm, arcn->sb.st_uid,
|
||||
arcn->sb.st_gid) < 0) {
|
||||
syswarn(1, oerrno, "Cannot create %s", nm);
|
||||
return (-1);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue