in reply to Need to pass an unsigned char array from an xsub back to Perl
You are extending the stack by 17 scalars:
EXTEND(SP,17);</c> <p>But then pushing a single scalar <c>PUSHs( sv_2mortal( ...) );</c> <p>And that scalar is an SvPV that points to a C-string: <c>newSVpv( ( +char*)array,(int)len )</c> <p>If you want to push that string as 16 (no point in return the null +in a searate scalar) individual unisgned values, you will need to loo +p over the string extracting the byte values, creating SvUV's from ea +ch one and then push each onto the stack. <p>Something like:<code> EXTEND( SP, 16 ); for( i=0; i < 16; ++i ) PUSHs( sv_2mortal( newSVuv( array[ i ] ) ) );
Also, there is no point in this: sv_setpvn(session_id, "\0",len); //Intializing it to NULL? Don't know if this wrks
1) it will already have been initialised to nulls by newSVpvn(array,17); //allocating memory 16 + 1 for null
2) if it wasn't initialised to nulls it wouldn't matter because the Xsession() sub is going to overwrite it anyway.
|
|---|