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
|
|---|