summaryrefslogtreecommitdiff
path: root/libc/msdos
diff options
context:
space:
mode:
authorRobert de Bath <rdebath@poboxes.com>2010-10-23 17:32:23 +0200
committerLubomir Rintel <lkundrak@v3.sk>2013-10-23 23:48:50 +0200
commitdddc44a59e3e393d5440a06e2b0535aeb1304f77 (patch)
treecfc2b774571f7cd6513a7e2f01a04518016e4995 /libc/msdos
parent62c27c1c5cb6257b13dfc9be0394e0d2e86f2735 (diff)
downloaddev86-dddc44a59e3e393d5440a06e2b0535aeb1304f77.tar.gz
Import Dev86src-0.16.18.tar.gzv0.16.18
Diffstat (limited to 'libc/msdos')
-rw-r--r--libc/msdos/msdos.c13
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;
}