Tim Bunce wrote:

sv_2io never returns false, it croaks. But since you're only calling it
if SvROK is true, and the croak error is meaningful ("Bad filehandle ...")
I think that's fine.  Also, IoOFP(io) might be false in some odd cases.

So I'd suggest a slight tweak:

      if (SvROK(file)) {    /* assume it's a filehandle */
          io = sv_2io(file);  /* will croak if not */
          if (!io || !(fp = IoOFP(io))) {
              warn("DBI trace filehandle is not valid");
              return 0;
          }
      }
      else { ... }

OK, thnx. BTW: Does something need to be refcnt'd here ? It occurs
to me that an app could code something odd and pass a handle
that would go out of scope, leaving DBI with a bogus handle,
unless we refcnt it.

Question is, what's refcntable ? io ? If so, we need an add'l
slot in DBIS to save it (so it can be decremented/discarded,
rather than PerlIO_close, when a close would normally occur).

BTW: I also swiped the U16 spare_pad variable from DBIS to
make a "logfp_is_ours" flag which gets set when DBI PerlIO_open's
the logfile, and cleared when it gets set to STDERR/STDOUT, or
the input is a filehandle, so DBI doesn't attempt to close
a filehandle it didn't open.


Will need some tests of course. Both for writing to a plain filehandle
and a tied one.


Did that last night, along w/ some POD updates.

- Dean

Reply via email to