On Fri, Nov 19, 2004 at 01:39:29AM -0500, Eric Garland wrote: > If I call it like this: > > $bytes_read = $tag->funny_internal_function_name( $tag, > $shared_array->[BUFFER], $offset, $length, $options) > > $shared_array->[BUFFER] stays empty. > > > If I call it like this: > > my ($tmp); > $bytes_read = $tag->funny_internal_function_name( $tag, $tmp, $offset, > $length, $options) > $shared_array->[BUFFER] = $tmp; > > Everything seems to work right. Is there something magical about shared > variables that makes them unable to be modified like non-shared scalars > from XS land? Is there any way to fill in these new fun shared scalars > from XS? > > Thanks > -Eric > > > > For those who care, my XS code looks like this: > > void > funny_internal_function_name (pTag, pValue, pOffset, pReadLength, pOptions) > const FPTagRef pTag > const FPLong pOffset > const FPLong pReadLength > const FPLong pOptions > SV * pValue > PREINIT: > FPStreamRef pStream; > char * value; > CODE: > sv_setpvn( pValue, "", 0); > value = (char *) SvGROW(pValue, pReadLength); > > **stuf you don't care about that writes to the buffer > **referred to by "value" and returns a length in pReadLength > > SvCUR_set(pValue, pReadLength);
I'm guessing you need a if (SvSMAGICAL(pValue)) mg_set(pValue); at the end. Don't know if XS has some other way to make sure that happens.