diff options
author | Chris Sherlock <chris.sherlock79@gmail.com> | 2017-07-10 04:14:31 +1000 |
---|---|---|
committer | Chris Sherlock <chris.sherlock79@gmail.com> | 2017-07-10 04:21:59 +1000 |
commit | 126da7c7774b49b044960d600e6b7f7d0d254c2d (patch) | |
tree | 64bd63a865c49a5fc093eeca7746c01b52586b04 /sal | |
parent | d90293e7ec42eab0ca09f730371599adc466e349 (diff) |
osl: CreateMutexW returns NULL on failure, not INVALID_HANDLE_VALUE
Fun fact - CreateFileW returns INVALID_HANDLE_VALUE (-1_) because the
16-bit functions OPenFile, _lopen and _lcreat return -1, so the Win32
API function CreateFile function also returned INVALID_HANDLE_VALUE
to ease porting Win16 code to Win32.
CreateMutexW, on the other hand, had no corresponding function in
16-bit Windows so it returns NULL on failure.
cf. https://blogs.msdn.microsoft.com/oldnewthing/20040302-00/?p=40443
Raymond Chen is a gem who explains clearly why Win32 code is so
idiosyncratic.
Change-Id: I7888d46b048e5674ad776c8ac8070a1e57aa37a6
Diffstat (limited to 'sal')
-rw-r--r-- | sal/osl/w32/pipe.cxx | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/sal/osl/w32/pipe.cxx b/sal/osl/w32/pipe.cxx index 125e06ed40ba..29289f360833 100644 --- a/sal/osl/w32/pipe.cxx +++ b/sal/osl/w32/pipe.cxx @@ -108,7 +108,7 @@ oslPipe SAL_CALL osl_createPipe(rtl_uString *strPipeName, oslPipeOptions Options rtl_uString* temp = nullptr; oslPipe pPipe; - PSECURITY_ATTRIBUTES pSecAttr = nullptr; + PSECURITY_ATTRIBUTES pSecAttr = nullptr; rtl_uString_newFromAscii(&path, PIPESYSTEM); rtl_uString_newFromAscii(&name, PIPEPREFIX); @@ -150,7 +150,7 @@ oslPipe SAL_CALL osl_createPipe(rtl_uString *strPipeName, oslPipeOptions Options rtl_uString_newConcat(&name, temp, strPipeName); /* alloc memory */ - pPipe= osl_createPipeImpl(); + pPipe = osl_createPipeImpl(); osl_atomic_increment(&(pPipe->m_Reference)); /* build system pipe name */ @@ -161,11 +161,11 @@ oslPipe SAL_CALL osl_createPipe(rtl_uString *strPipeName, oslPipeOptions Options if (Options & osl_Pipe_CREATE) { - SetLastError( ERROR_SUCCESS ); + SetLastError(ERROR_SUCCESS); pPipe->m_NamedObject = CreateMutexW(nullptr, FALSE, SAL_W(name->buffer)); - if (pPipe->m_NamedObject != INVALID_HANDLE_VALUE && pPipe->m_NamedObject) + if (pPipe->m_NamedObject) { if (GetLastError() != ERROR_ALREADY_EXISTS) { @@ -199,7 +199,7 @@ oslPipe SAL_CALL osl_createPipe(rtl_uString *strPipeName, oslPipeOptions Options } else { - BOOL fPipeAvailable; + BOOL fPipeAvailable; do { @@ -231,7 +231,7 @@ oslPipe SAL_CALL osl_createPipe(rtl_uString *strPipeName, oslPipeOptions Options // Pipe instance maybe caught by another client -> try again } } - } while ( fPipeAvailable ); + } while (fPipeAvailable); } /* if we reach here something went wrong */ @@ -370,15 +370,17 @@ sal_Int32 SAL_CALL osl_receivePipe(oslPipe pPipe, DWORD lastError = GetLastError(); if (lastError == ERROR_MORE_DATA) + { nBytes = BytesToRead; - else - { - if (lastError == ERROR_PIPE_NOT_CONNECTED) + } + else + { + if (lastError == ERROR_PIPE_NOT_CONNECTED) nBytes = 0; else nBytes = (DWORD) -1; - pPipe->m_Error = osl_Pipe_E_ConnectionAbort; + pPipe->m_Error = osl_Pipe_E_ConnectionAbort; } } @@ -400,9 +402,9 @@ sal_Int32 SAL_CALL osl_sendPipe(oslPipe pPipe, if (!WriteFile(pPipe->m_File, pBuffer, BytesToSend, &nBytes, &os) && ((GetLastError() != ERROR_IO_PENDING) || - ! GetOverlappedResult(pPipe->m_File, &os, &nBytes, TRUE))) + !GetOverlappedResult(pPipe->m_File, &os, &nBytes, TRUE))) { - if (GetLastError() == ERROR_PIPE_NOT_CONNECTED) + if (GetLastError() == ERROR_PIPE_NOT_CONNECTED) nBytes = 0; else nBytes = (DWORD) -1; |