From b48be86ce158efa23a7a750b9294fc8a145b46a5 Mon Sep 17 00:00:00 2001 From: "Andrey A. Chernov" Date: Sun, 15 Oct 2006 16:24:31 +0000 Subject: [PATCH] Do real seek Catch ftruncate errors PR: 104295 Submitted by: ru (seek) --- lib/libc/stdio/freopen.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/libc/stdio/freopen.c b/lib/libc/stdio/freopen.c index 476f3efc856..bbf039a96ee 100644 --- a/lib/libc/stdio/freopen.c +++ b/lib/libc/stdio/freopen.c @@ -113,9 +113,17 @@ freopen(file, mode, fp) return (NULL); } } - if (oflags & O_TRUNC) - ftruncate(fp->_file, 0); - if (_fseeko(fp, 0, oflags & O_APPEND ? SEEK_END : SEEK_SET, + if (oflags & O_TRUNC) { + if (ftruncate(fp->_file, (off_t)0) < 0) { + sverrno = errno; + fclose(fp); + FUNLOCKFILE(fp); + errno = sverrno; + return (NULL); + } + } + fp->_flags |= __SNPT; /* real seek */ + if (_fseeko(fp, (off_t)0, oflags & O_APPEND ? SEEK_END : SEEK_SET, 0) < 0 && errno != ESPIPE) { sverrno = errno; fclose(fp);