summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Huston <shuston@riverace.com>2002-07-12 16:40:58 +0000
committerSteve Huston <shuston@riverace.com>2002-07-12 16:40:58 +0000
commitc3d85b768905d96bccadbbd7046cb840592b09ba (patch)
tree1d73ffafcefb3368287e0a8bef42c9c544ab802d
parentb5625192119eac5ea28c3253ec02a76ebf092db6 (diff)
downloadATCD-c3d85b768905d96bccadbbd7046cb840592b09ba.tar.gz
ChangeLogTag:Fri Jul 12 12:37:42 2002 Steve Huston <shuston@riverace.com>
-rw-r--r--ChangeLog7
-rw-r--r--ChangeLogs/ChangeLog-03a7
-rw-r--r--ace/DLL_Manager.cpp13
-rw-r--r--ace/Parse_Node.cpp12
4 files changed, 34 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 6c07d51b297..97cb904023e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Fri Jul 12 12:37:42 2002 Steve Huston <shuston@riverace.com>
+
+ * ace/DLL_Manager.cpp:
+ * ace/Parse_Node.cpp: g++ complains that ISO C++ won't allow cast
+ from void * to func ptr... so cast void * to ptrdiff_t, then to
+ func ptr.
+
Fri Jul 12 12:15:49 2002 Steve Huston <shuston@riverace.com>
* ace/Timer_Heap_T.cpp (grow_heap): Fix compile warning.
diff --git a/ChangeLogs/ChangeLog-03a b/ChangeLogs/ChangeLog-03a
index 6c07d51b297..97cb904023e 100644
--- a/ChangeLogs/ChangeLog-03a
+++ b/ChangeLogs/ChangeLog-03a
@@ -1,3 +1,10 @@
+Fri Jul 12 12:37:42 2002 Steve Huston <shuston@riverace.com>
+
+ * ace/DLL_Manager.cpp:
+ * ace/Parse_Node.cpp: g++ complains that ISO C++ won't allow cast
+ from void * to func ptr... so cast void * to ptrdiff_t, then to
+ func ptr.
+
Fri Jul 12 12:15:49 2002 Steve Huston <shuston@riverace.com>
* ace/Timer_Heap_T.cpp (grow_heap): Fix compile warning.
diff --git a/ace/DLL_Manager.cpp b/ace/DLL_Manager.cpp
index 59fec231b24..d1edd19046c 100644
--- a/ace/DLL_Manager.cpp
+++ b/ace/DLL_Manager.cpp
@@ -461,9 +461,18 @@ ACE_DLL_Manager::unload_dll (ACE_DLL_Handle *dll_handle, int force_unload)
// Declare the type of the symbol:
typedef int (*dll_unload_policy)(void);
dll_unload_policy the_policy = 0;
+ void *unload_policy_ptr =
+ dll_handle->symbol (ACE_TEXT ("_get_dll_unload_policy"), 1);
+#if defined (__GNUG__)
+ // g++ won't allow void*->func*
+ ptrdiff_t temp_p =
+ ACE_reinterpret_cast (ptrdiff_t, unload_policy_ptr);
the_policy =
- ACE_reinterpret_cast (dll_unload_policy,
- dll_handle->symbol (ACE_TEXT ("_get_dll_unload_policy"), 1));
+ ACE_reinterpret_cast (dll_unload_policy, temp_p);
+#else
+ the_policy =
+ ACE_reinterpret_cast (dll_unload_policy, unload_policy_ptr);
+#endif /* __GNUG__ */
if (the_policy != 0)
unload = ACE_BIT_DISABLED (the_policy (),
ACE_DLL_UNLOAD_POLICY_LAZY);
diff --git a/ace/Parse_Node.cpp b/ace/Parse_Node.cpp
index 788207faf02..3e3818b3e71 100644
--- a/ace/Parse_Node.cpp
+++ b/ace/Parse_Node.cpp
@@ -477,9 +477,8 @@ ACE_Function_Node::symbol (ACE_Service_Object_Exterminator *gobbler)
// object.
ACE_TCHAR *function_name = ACE_const_cast (ACE_TCHAR *,
this->function_name_);
- func = ACE_reinterpret_cast (ACE_Service_Factory_Ptr,
- this->dll_.symbol (function_name));
- if (func == 0)
+ void *func_p = this->dll_.symbol (function_name);
+ if (func_p == 0)
{
ace_yyerrno++;
@@ -496,6 +495,13 @@ ACE_Function_Node::symbol (ACE_Service_Object_Exterminator *gobbler)
return 0;
}
}
+#if defined (__GNUG__)
+ // g++ won't allow void*->func*
+ ptrdiff_t temp_p = ACE_reinterpret_cast (ptrdiff_t, func_p);
+ func = ACE_reinterpret_cast (ACE_Service_Factory_Ptr, temp_p);
+#else
+ func = ACE_reinterpret_cast (ACE_Service_Factory_Ptr, func_p);
+#endif /* __GNUG__ */
// Invoke the factory function and record it's return value.
this->symbol_ = (*func) (gobbler);