apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Greg Stein <gst...@lyra.org>
Subject Re: [PATCH] Type conversion needed for C++
Date Sun, 27 May 2001 07:12:33 GMT
Adding the cast just doesn't seem right. We implicitly cast void* to other
things all the time. Why does *this* one break things? I just don't buy the
need to do the cast.

Really... void* should be automatically castable to anything.

I'm guessing something more subtle is occurring, and the cast is simply
hiding that subtlety.

Cheers,
-g

On Sat, May 26, 2001 at 06:12:38PM -0400, Christian Gross wrote:
> On Sat, 26 May 2001 14:19:25 -0500, you wrote:
> 
> >I believe this would break type saftey.  These are very carefully constructed to
> >ensure that the proper hook fn is registered for the appropriate hook.
> >
> >I'll take a look at your patch later today and see what (if) it breaks anything,
> >or if we were simply missing the "C" namespace wrappers.
> >
> The problem is that apr_array_push returns a void pointer.  And since
> pHook is a predefined data type there is a type problem.  The extern
> "C" wrappers only make the function behave using C linkage.  The code
> within is still treated as C++.  I tried it and the same type cast
> error still occured.
> 
> I think the only way to solve is this to use a type cast.  But correct
> me if I am wrong.
> 
> Christian
> 
> >----- Original Message ----- 
> >From: "Christian Gross" <ChristianGross@yahoo.de>
> >Sent: Saturday, May 26, 2001 1:33 PM
> >
> >
> >I was playing around with hooks and noticed that there is a problem
> >with using hooks on C++.  The problem was that C++ does not allow a
> >type conversion without a type cast.  Following is the fix
> >
> >---------------------------------------------------------------
> >--- c:/httpd2_16/srclib/apr-util/include/apr_hooks.h Wed Apr  4
> >01:35:46 2001
> >+++ c:/httpd/srclib/apr-util/include/apr_hooks.h Sat May 26
> >14:21:58 2001
> >@@ -98,7 +98,7 @@
> >
> >_hooks.link_##name=apr_array_make(apr_global_hook_pool,1,sizeof(ns##_LINK_##name##_t));
> >\
> >  apr_hook_sort_register(#name,&_hooks.link_##name); \
> >  } \
> >-    pHook=apr_array_push(_hooks.link_##name); \
> >+    pHook=(ns##_LINK_##name##_t *)apr_array_push(_hooks.link_##name);
> >\
> >     pHook->pFunc=pf; \
> >     pHook->aszPredecessors=aszPre; \
> >     pHook->aszSuccessors=aszSucc; \
> >
> >
> >

-- 
Greg Stein, http://www.lyra.org/

Mime
View raw message