X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Fwindows%2Ffile.cpp;h=90c5bb5e6b50bdd840ee3482dd4ee8c585c04582;hp=b973375475abe3554296969bb5a19ed836fbbe2f;hb=41363aed34382386f915f17c1a961750b4fdcb14;hpb=609c9a508cfdc7b42c46c4f21d17639204165a00 diff --git a/source/io/windows/file.cpp b/source/io/windows/file.cpp index b973375..90c5bb5 100644 --- a/source/io/windows/file.cpp +++ b/source/io/windows/file.cpp @@ -33,11 +33,16 @@ void File::platform_init(const string &fn, CreateMode cm) else share_flags = FILE_SHARE_READ; - *handle = CreateFile(fn.c_str(), flags, share_flags, 0, create_flags, FILE_ATTRIBUTE_NORMAL, 0); + SECURITY_ATTRIBUTES sec_attr; + sec_attr.nLength = sizeof(SECURITY_ATTRIBUTES); + sec_attr.lpSecurityDescriptor = nullptr; + sec_attr.bInheritHandle = !!(mode&M_INHERIT); + + *handle = CreateFile(fn.c_str(), flags, share_flags, nullptr, create_flags, FILE_ATTRIBUTE_NORMAL, &sec_attr); if(!handle) { int err = GetLastError(); - if(err==ERROR_FILE_NOT_FOUND) + if(err==ERROR_FILE_NOT_FOUND || err==ERROR_PATH_NOT_FOUND) throw file_not_found(fn); else if(err==ERROR_FILE_EXISTS) throw file_already_exists(fn);