If (flags & O_TRUNC), don't truncate the file until we've successfully

locked it.

MFC after:	3 weeks
This commit is contained in:
Dag-Erling Smørgrav 2007-05-23 08:12:34 +00:00
parent 905a24b997
commit d75d56060e
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=169894

View File

@ -41,7 +41,7 @@ __FBSDID("$FreeBSD$");
int
flopen(const char *path, int flags, ...)
{
int fd, operation, serrno;
int fd, operation, serrno, truncate;
struct stat sb, fsb;
mode_t mode;
@ -62,6 +62,9 @@ flopen(const char *path, int flags, ...)
if (flags & O_NONBLOCK)
operation |= LOCK_NB;
truncate = (flags & O_TRUNC);
flags |= ~O_TRUNC;
for (;;) {
if ((fd = open(path, flags, mode)) == -1)
/* non-existent or no access */
@ -91,6 +94,13 @@ flopen(const char *path, int flags, ...)
close(fd);
continue;
}
if (truncate && ftruncate(fd, 0) != 0) {
/* can't happen [tm] */
serrno = errno;
close(fd);
errno = serrno;
return (-1);
}
return (fd);
}
}