in reply to perl guts and the SvPV() macro

It's unlikely that the C function with the prototype you give is passing back a string. You're passing in a character buffer(as char*), and it doesn't know how long it is unless it already contains a null terminated string.

There are basically two ways to return a string in C:

const char* fcn(void);

returns a pointer to an internal buffer. More common (for functions such as read()) is

int fcn(char *buffer, int bufsize);

where bufsize is the size of the buffer, and the function returns the number of characters read. In this case, what you want to do is something like:

const int bufsize = 16; int len; RETVAL = NEWSV(0,bufsize); len = fcn(SvPV_nolen(RETVAL), bufsize); SvCUR_set(RETVAL, len);

The main problem I see with your code is you never find out the length of the string returned by fcn().

Ron Steinke rsteinke@w-link.net