mje has asked for the wisdom of the Perl Monks concerning the following question:
I was adding a new method to DBD::ODBC and started by looking at a similar method in DBD::Pg which in XS is:
pg_lo_read(dbh, fd, buf, len) SV * dbh int fd char * buf size_t len PREINIT: SV * const bufsv = SvROK(ST(2)) ? SvRV(ST(2)) : ST(2); int ret; CODE: sv_setpvn(bufsv,"",0); /* Make sure we can grow it saf +ely */ buf = SvGROW(bufsv, len + 1); ret = pg_db_lo_read(dbh, fd, buf, len); if (ret > 0) { SvCUR_set(bufsv, ret); *SvEND(bufsv) = '\0'; sv_setpvn(ST(2), buf, (unsigned)ret); SvSETMAGIC(ST(2)); } ST(0) = (ret >= 0) ? sv_2mortal(newSViv(ret)) : &PL_sv +_undef;
pg_db_lo_read is passed the char * buf of bufsv and fills it with the lob data so why is the line "sv_setpvn(ST(2), buf, (unsigned)ret);" required? When I copied this code and used it in DBD::ODBC but omitted that line it worked fine. It seems to me that the line in question is not required. Any comments?
|
|---|