w32: Use cast by uintptr_t for thread ID.
authorNIIBE Yutaka <gniibe@fsij.org>
Thu, 8 Nov 2018 04:26:41 +0000 (13:26 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Thu, 8 Nov 2018 04:26:41 +0000 (13:26 +0900)
* w32/npth.c (npth_init): Cast with uintptr_t.
(npth_setname_np, npth_create, npth_self): Likewise.

--

In w32/npth.h, npth_t is unsigned long int type, which is 32-bit
for both of 32-bit machine and 64-bit machine.

We use TlsSetValue, TlsGetValue and CreateThread API to handle
thread ID, which uses void * type, which is 64-bit on 64-bit
machine.

Because the size is different on 64-bit machine, here, we use explicit
cast to integer type which has enough size to have pointer.

Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
w32/npth.c

index 6ea6d19..41213c0 100644 (file)
@@ -351,7 +351,7 @@ npth_init (void)
   thread = thread_table[thread_id];
   thread->handle = handle;
 
-  if (! TlsSetValue(tls_index, (LPVOID) thread_id))
+  if (! TlsSetValue(tls_index, (LPVOID)(uintptr_t) thread_id))
     return map_error (GetLastError());
 
   LEAVE();
@@ -449,11 +449,11 @@ npth_setname_np (npth_t target_thread, const char *name)
 static DWORD
 thread_start (void *arg)
 {
-  npth_t thread_id = (npth_t) arg;
+  npth_t thread_id = (npth_t)(uintptr_t) arg;
   npth_impl_t thread;
   void *result;
 
-  if (! TlsSetValue(tls_index, (LPVOID) thread_id))
+  if (! TlsSetValue(tls_index, (LPVOID)(uintptr_t) thread_id))
     /* FIXME: There is not much we can do here.  */
     ;
 
@@ -519,7 +519,7 @@ npth_create (npth_t *newthread, const npth_attr_t *user_attr,
 
   handle = CreateThread (NULL, 0,
                         (LPTHREAD_START_ROUTINE)thread_start,
-                        (void *) thread_id, CREATE_SUSPENDED,
+                        (void *)(uintptr_t) thread_id, CREATE_SUSPENDED,
                         NULL);
   if (handle == NULL)
     {
@@ -556,7 +556,7 @@ npth_self (void)
   if (thread_id == 0 && GetLastError() != ERROR_SUCCESS)
     /* FIXME: Log the error.  */
     ;
-  return (npth_t) thread_id;
+  return (npth_t)(uintptr_t) thread_id;
 }