mirror of
https://git.openafs.org/openafs.git
synced 2025-01-21 00:10:15 +00:00
vol: nt_open should not create missing directories
Revert the prior change that added directory creation to nt_open(). nt_open() should fail and the caller should create the directories. Failure to do so results in an incomplete tree which confuses the salvager. Change-Id: Ieb2a05baada2531dad1869e95823fe2006bdc2c6 Reviewed-on: http://gerrit.openafs.org/3709 Reviewed-by: Derrick Brashear <shadow@dementia.org> Tested-by: Derrick Brashear <shadow@dementia.org>
This commit is contained in:
parent
3c25ae062a
commit
1ad22ed7e1
@ -120,39 +120,6 @@ nt_open(char *name, int flags, int mode)
|
||||
fh = CreateFile(name, nt_access, nt_share, NULL, nt_create, FandA, NULL);
|
||||
if (fh == INVALID_HANDLE_VALUE) {
|
||||
DWORD gle = GetLastError();
|
||||
|
||||
if (gle == ERROR_PATH_NOT_FOUND) {
|
||||
/*
|
||||
* one or more of the directories in the path
|
||||
* does not exist. We must create them and
|
||||
* try again to create the file.
|
||||
*/
|
||||
char * p;
|
||||
|
||||
for (p=name; *p && *p != OS_DIRSEPC; p++);
|
||||
while (*p == OS_DIRSEPC) p++; /* ignore the first dirsep */
|
||||
for (; *p; p++) {
|
||||
if (*p == OS_DIRSEPC) {
|
||||
*p = '\0';
|
||||
if (CreateDirectory(name, NULL))
|
||||
gle = 0;
|
||||
else
|
||||
gle = GetLastError();
|
||||
*p = OS_DIRSEPC;
|
||||
if (gle != ERROR_SUCCESS &&
|
||||
gle != ERROR_ALREADY_EXISTS) {
|
||||
/* The directory creation failed. */
|
||||
fh = INVALID_FD;
|
||||
break;
|
||||
} else {
|
||||
while (*(p+1) == OS_DIRSEPC) p++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!*p) /* successful creation of the path */
|
||||
goto retry;
|
||||
}
|
||||
errno = nterr_nt2unix(gle, EBADF);
|
||||
}
|
||||
return fh;
|
||||
|
Loading…
Reference in New Issue
Block a user