in reply to Re^2: XS malloc and free (whose)
in thread XS malloc and free

I think you are missing a "*":

void (*perls_fre­e)( void*p ) = &free; #undef free

But that still risks the second half of my warning:

(but don't use "free" any further down in your code, even indirectly via some other obscure C-preprocessor macro).

which seems rather difficult to avoid with any certainty given your assessment of the current messiness. :)

Update: BTW, I am aware that the "&" is "optional", but I consider this simply to be a mistake on the part of the ANSI C definers. (:

- tye        

Replies are listed 'Best First'.
Re^4: XS malloc and free (whose)
by BrowserUk (Patriarch) on Feb 07, 2006 at 20:59 UTC

    I knew it didn't look right.

    How about doing things the other way around. Take an alias for the CRT free() function prior to including XSUB.h?


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      First thanks for all the insight.

      That maybe a solution, but not through the preprocessor (code yet untested)

      // private external C library with one function #include <stdlib.h> void crt_free(void*p) { free(p); }
      link with this and call crt_free() instead of free().

      And it came to pass that in time the Great God Om spake unto Brutha, the Chosen One: "Psst!"
      (Terry Pratchett, Small Gods)

        That would work. Just make sure you comment both the little file and wherever you call it from, explaining why you've stuck this indirection wrapper around a CRT call and mentioning that noone must ever include XSUB.h in there. Otherwise someone is going to be very confused by the apparent duplication, or worse back to square one, a year or so from now :)


        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.