summaryrefslogtreecommitdiff
path: root/pthread_win32_attach_detach_np.c
diff options
context:
space:
mode:
Diffstat (limited to 'pthread_win32_attach_detach_np.c')
-rw-r--r--pthread_win32_attach_detach_np.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/pthread_win32_attach_detach_np.c b/pthread_win32_attach_detach_np.c
index d26a632..bfad450 100644
--- a/pthread_win32_attach_detach_np.c
+++ b/pthread_win32_attach_detach_np.c
@@ -45,7 +45,7 @@ static HINSTANCE ptw32_h_quserex;
BOOL
pthread_win32_process_attach_np ()
{
- TCHAR WindowsSystemDirBuf[1024];
+ TCHAR QuserExDLLPathBuf[1024];
BOOL result = TRUE;
result = ptw32_processInitialize ();
@@ -57,6 +57,9 @@ pthread_win32_process_attach_np ()
#if defined(__GNUC__)
ptw32_features = 0;
#else
+ /*
+ * This is obsolete now.
+ */
ptw32_features = PTW32_SYSTEM_INTERLOCKED_COMPARE_EXCHANGE;
#endif
@@ -67,12 +70,22 @@ pthread_win32_process_attach_np ()
*
* This should take care of any security issues.
*/
- if(GetSystemDirectory(WindowsSystemDirBuf, sizeof(WindowsSystemDirBuf)))
+#if defined(__GNUC__) || _MSC_VER < 1400
+ if(GetSystemDirectory(QuserExDLLPathBuf, sizeof(QuserExDLLPathBuf)))
+ {
+ (void) strncat(QuserExDLLPathBuf,
+ "\\QUSEREX.DLL",
+ sizeof(QuserExDLLPathBuf) - strlen(QuserExDLLPathBuf) - 1);
+ ptw32_h_quserex = LoadLibrary(QuserExDLLPathBuf);
+ }
+#else
+ /* strncat is secure - this is just to avoid a warning */
+ if(GetSystemDirectory(QuserExDLLPathBuf, sizeof(QuserExDLLPathBuf)) &&
+ 0 == strncat_s(QuserExDLLPathBuf, sizeof(QuserExDLLPathBuf), "\\QUSEREX.DLL", 12))
{
- ptw32_h_quserex = LoadLibrary (TEXT (strncat(WindowsSystemDirBuf,
- "\\QUSEREX.DLL",
- sizeof(WindowsSystemDirBuf))));
+ ptw32_h_quserex = LoadLibrary(QuserExDLLPathBuf);
}
+#endif
if (ptw32_h_quserex != NULL)
{