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?
In reply to Perl XS - is this code required in DBD::Pg? by mje
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |