http://qs321.pair.com?node_id=96050


in reply to Re: Re: Passing a very large string by reference to a c library
in thread Passing a very large string by reference to a c library

I've got it to work with:

unsigned long
find_index (key, data)
        unsigned long         key
        SV    *               data
    INIT:
       STRLEN          datalen;
       char * s;
       if ((!SvROK(data))
          || (SvTYPE(SvRV(data)) != SVt_PV))
       {
          XSRETURN_UNDEF;
       }
       s = SvPV(SvRV(data), datalen);
    CODE:
      RETVAL = find_index (key, s, datalen);
    OUTPUT:
      RETVAL

I'm still not sure if SvPV copies its internal data somewhere or just returns a pointer to it.

Comments please

dino

Replies are listed 'Best First'.
Re: Re: Re: Re: Passing a very large string by reference to a c library
by dino (Sexton) on Jul 12, 2001 at 20:03 UTC
    And finally,

    from the perlapi manpage:

     SvPV    Returns a pointer to the string in the SV, or a
             stringified form of the SV if the SV does not con-
             tain a string.  Handles 'get' magic.
     
             char*   SvPV(SV* sv, STRLEN len)
    

    so that should do it

    dino