From d2516d4eaf29ffded0687ec7f5292d0e6317a5f0 Mon Sep 17 00:00:00 2001 From: eck Date: Mon, 9 Apr 1990 15:21:43 +0000 Subject: [PATCH] improved file creation on f[re]open() --- lang/cem/libcc.ansi/stdio/fopen.c | 10 +++++++--- lang/cem/libcc.ansi/stdio/freopen.c | 8 ++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lang/cem/libcc.ansi/stdio/fopen.c b/lang/cem/libcc.ansi/stdio/fopen.c index bd1c1ef1b..5fe89be28 100644 --- a/lang/cem/libcc.ansi/stdio/fopen.c +++ b/lang/cem/libcc.ansi/stdio/fopen.c @@ -37,7 +37,6 @@ int _open(const char *path, int flags); int _creat(const char *path, int mode); - int _close(int d); FILE * @@ -89,8 +88,13 @@ fopen(const char *name, const char *mode) */ if ((rwflags & O_TRUNC) || (((fd = _open(name, rwmode)) < 0) - && (flags & _IOWRITE))) - fd = _creat(name, PMODE); + && (flags & _IOWRITE))) { + if (((fd = _creat(name, PMODE)) > 0) && flags | _IOREAD) { + (void) _close(fd); + fd = _open(name, rwmode); + } + + } if (fd < 0) return (FILE *)NULL; diff --git a/lang/cem/libcc.ansi/stdio/freopen.c b/lang/cem/libcc.ansi/stdio/freopen.c index 92111191e..af384b70d 100644 --- a/lang/cem/libcc.ansi/stdio/freopen.c +++ b/lang/cem/libcc.ansi/stdio/freopen.c @@ -68,8 +68,12 @@ freopen(const char *name, const char *mode, FILE *stream) if ((rwflags & O_TRUNC) || (((fd = _open(name, rwmode)) < 0) - && (flags & _IOWRITE))) - fd = _creat(name, PMODE); + && (flags & _IOWRITE))) { + if (((fd = _creat(name, PMODE)) < 0) && flags | _IOREAD) { + (void) _close(fd); + fd = _open(name, rwmode); + } + } if (fd < 0) { for( i = 0; i < FOPEN_MAX; i++) { -- 2.34.1