|
@@ -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;
|
|
|
|