int my_open( const char *path, int mode, ... ) { DISABLE_ERRORS; int result; auto tpath = tstr(path); LPCTSTR p = MRP(tpath.get()); // Windows "open" does not handle _O_CREAT and _O_BINARY as it should if(mode & _O_CREAT) { if(exists(p)) { result = _topen( p, mode & ~_O_CREAT ); D(bug(TEXT("open-nocreat(%s,%s,%d) = %d\n"), tpath.get(), p, mode, result)); } else { result = _tcreat( p, _S_IWRITE|_S_IREAD ); if(result < 0) { make_folders(p); result = _tcreat( p, _S_IWRITE|_S_IREAD ); } D(bug(TEXT("open-creat(%s,%s,%d) = %d\n"), tpath.get(), p, mode, result)); } } else { result = _topen( p, mode ); D(bug(TEXT("open(%s,%s,%d) = %d\n"), tpath.get(), p, mode, result)); } if(result < 0) { my_errno = errno; } else { setmode(result, _O_BINARY); my_errno = 0; } RESTORE_ERRORS; return result; }
int my_creat( const char *path, int mode ) { DISABLE_ERRORS; auto tpath = tstr(path); LPCTSTR p = MRP(tpath.get()); int result = _tcreat( p, _S_IWRITE|_S_IREAD ); // note mode if(result < 0) { make_folders(p); result = _tcreat( p, _S_IWRITE|_S_IREAD ); // note mode } if(result < 0) { my_errno = errno; } else { setmode(result, _O_BINARY); my_errno = 0; } D(bug(TEXT("creat(%s,%s,%d) = %d\n"), tpath.get(), p, mode,result)); RESTORE_ERRORS; return result; }
int our_creat(char *path, mode_t mode) { #ifdef _WINDOWS LPTSTR p = NULL; int ret = -1; p = utf8_to_lptstr((LPSTR) path); if(p){ ret = _tcreat(p, mode); fs_give((void **) &p); } return ret; #else /* UNIX */ return(creat(fname_to_locale(path), mode)); #endif /* UNIX */ }
int _RTLENTRYF _EXPFUNC __tcreat (const _TCHAR *pathP, int attr) { return _tcreat(pathP, attr); }