improved file creation on f[re]open()
This commit is contained in:
parent
aa4de95f26
commit
d2516d4eaf
2 changed files with 13 additions and 5 deletions
|
@ -37,7 +37,6 @@
|
||||||
|
|
||||||
int _open(const char *path, int flags);
|
int _open(const char *path, int flags);
|
||||||
int _creat(const char *path, int mode);
|
int _creat(const char *path, int mode);
|
||||||
|
|
||||||
int _close(int d);
|
int _close(int d);
|
||||||
|
|
||||||
FILE *
|
FILE *
|
||||||
|
@ -89,8 +88,13 @@ fopen(const char *name, const char *mode)
|
||||||
*/
|
*/
|
||||||
if ((rwflags & O_TRUNC)
|
if ((rwflags & O_TRUNC)
|
||||||
|| (((fd = _open(name, rwmode)) < 0)
|
|| (((fd = _open(name, rwmode)) < 0)
|
||||||
&& (flags & _IOWRITE)))
|
&& (flags & _IOWRITE))) {
|
||||||
fd = _creat(name, PMODE);
|
if (((fd = _creat(name, PMODE)) > 0) && flags | _IOREAD) {
|
||||||
|
(void) _close(fd);
|
||||||
|
fd = _open(name, rwmode);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if (fd < 0) return (FILE *)NULL;
|
if (fd < 0) return (FILE *)NULL;
|
||||||
|
|
||||||
|
|
|
@ -68,8 +68,12 @@ freopen(const char *name, const char *mode, FILE *stream)
|
||||||
|
|
||||||
if ((rwflags & O_TRUNC)
|
if ((rwflags & O_TRUNC)
|
||||||
|| (((fd = _open(name, rwmode)) < 0)
|
|| (((fd = _open(name, rwmode)) < 0)
|
||||||
&& (flags & _IOWRITE)))
|
&& (flags & _IOWRITE))) {
|
||||||
fd = _creat(name, PMODE);
|
if (((fd = _creat(name, PMODE)) < 0) && flags | _IOREAD) {
|
||||||
|
(void) _close(fd);
|
||||||
|
fd = _open(name, rwmode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
for( i = 0; i < FOPEN_MAX; i++) {
|
for( i = 0; i < FOPEN_MAX; i++) {
|
||||||
|
|
Loading…
Reference in a new issue