diff options
author | Robert de Bath <rdebath@poboxes.com> | 2010-10-23 17:32:23 +0200 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2013-10-23 23:48:50 +0200 |
commit | dddc44a59e3e393d5440a06e2b0535aeb1304f77 (patch) | |
tree | cfc2b774571f7cd6513a7e2f01a04518016e4995 /libc/msdos/msdos.c | |
parent | 62c27c1c5cb6257b13dfc9be0394e0d2e86f2735 (diff) | |
download | dev86-dddc44a59e3e393d5440a06e2b0535aeb1304f77.tar.gz |
Import Dev86src-0.16.18.tar.gzv0.16.18
Diffstat (limited to 'libc/msdos/msdos.c')
-rw-r--r-- | libc/msdos/msdos.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/libc/msdos/msdos.c b/libc/msdos/msdos.c index ae10b39..f9bfb9b 100644 --- a/libc/msdos/msdos.c +++ b/libc/msdos/msdos.c @@ -401,18 +401,23 @@ static int xlate_mode[] = { if( (cmode & 0222) == 0 ) creat_mode = 1; - /* BzzzT. Assume these flags both mean the merge of them */ - /* BzzzT. Also ignore O_EXCL */ - if( type & (O_TRUNC|O_CREAT) ) - rv = __dos_creat(nname, creat_mode); + /* BzzzT. Ignore O_EXCL */ + if( type & O_TRUNC ) /* Assume TRUNC always means CREAT too */ + rv = __dos_creat(nname, creat_mode); else { + int sv = errno; /* If we would open in compatibility mode make it a little more unixy */ if( type & O_DENYMODE ) rv = __dos_open(nname, type&(O_ACCMODE|O_DENYMODE|O_SETFD)); else rv = __dos_open(nname, xlate_mode[type&O_ACCMODE]); + + if (rv == -1 && errno == ENOENT && (type & O_CREAT)) { + errno = sv; + rv = __dos_creat(nname, creat_mode); + } } return rv; } |