You should try passing in a \$buf instead of $buf (using both implementations).

The "char * buf" formal argument is misleading and is only ever used as an ordinary lexcial "char *" variable.

The PREINIT: line, SV * const bufsv = SvROK(ST(2­)) ? SvRV(ST(2)­) : ST(2); means that you can either pass in $buf to have it populated or pass in \$buf. It looks to me like the line you asked about is just wasteful in the case of passing in $buf. I think it actually breaks things if you pass in \$buf.

It smells like historical baggage. I'd rewrite the code like so:

pg_lo_read( dbh, fd, bufsv, len ) SV * dbh int fd SV * bufsv size_t len CODE: int ret; char * buf; if( SvROK(bufsv) ) { bufsv= SvRV(bufsv); } sv_setpvn(bufsv,"",0); /* Make sure we can grow it safely */ buf= SvGROW( bufsv, len + 1 ); ret= pg_db_lo_read( dbh, fd, buf, len ); if( 0 < ret ) { SvCUR_set( bufsv, ret ); *SvEND(bufsv)= '\0'; SvSETMAGIC( bufsv ); } ST(0)= 0 <= ret ? sv_2mortal(newSViv(ret)) : &PL_sv_undef;

- tye        


In reply to Re: Perl XS - is this code required in DBD::Pg? (cruft) by tye
in thread Perl XS - is this code required in DBD::Pg? by mje

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.