From: John E. Malmberg [mailto:[EMAIL PROTECTED]
 
> With the upgrade, I am getting two failures in blead on OpenVMS Alpha.
> 
> Built with Non threaded build, large files, and experimental symbolic
> link support on an ODS-5 volume.
> 
> ODS-5 volume means that the traditional name mangling of extra dots in
> the filename on disk to be C<_> is not always being done, and my source
> tree is identical in filenames, including case to that on a UNIX platform.
> 
> ext/Compress/Zlib/t/03zlib-v1......................FAILED at test 398
> 
> not ok 398 - flush not ok
> #   Failed test 'flush not ok'
> #   at [-.ext.compress.zlib.t]03zlib-v1.t line 1184.
> not ok 399
> #   Failed test at [-.ext.compress.zlib.t]03zlib-v1.t line 1185.
> #          got: '0'
> #     expected: '-2'
> not ok 400 - flush ok
> #   Failed test 'flush ok'
> #   at [-.ext.compress.zlib.t]03zlib-v1.t line 1186.
> ok 401 - Closed
> # Looks like you failed 3 tests of 401.
> 

The first two tests failing are checking that when you give an invalid
parameter to gzflush it returns Z_STREAM_ERROR (which is -2). In your case
it is returning 0, which is success.

The third test failing is checking that a subsequent flush works, but in
your case it is failing.

> I am in the debugger, and the call to flush is looking up an error to a
> previous operation and getting "stream error".

That sounds correct if this is the line of code you are executing from the
test harness.

    $status = $fil->gzflush(0xfff);

Can you confirm that at the end of this block of code (from
Compress-Raw-Zlib/Zlib.xs) that RETVAL is -2. If that is the case then the
problem is nothing to do with the zlib library itself. 

    for (;;) {
        if (s->stream.avail_out == 0) {
            /* consumed all the available output, so extend it */
            Sv_Grow(output, SvLEN(output) + bufinc) ;
            cur_length += increment ;
            s->stream.next_out = (Bytef*) SvPVbyte_nolen(output) +
cur_length ;
            increment = bufinc ;
            s->stream.avail_out = increment;
            bufinc *= 2 ;
        }
        RETVAL = deflate(&(s->stream), f);

        /* deflate has finished flushing only when it hasn't used up
         * all the available space in the output buffer:
         */
        if (s->stream.avail_out != 0 || RETVAL != Z_OK )
            break;
    }

    RETVAL =  (RETVAL == Z_STREAM_END ? Z_OK : RETVAL) ;

Assuming you have a RETVAL of -2, the next thing that happens is the
creation of a dual-type scalar in this macro

#define setDUALstatus(var, err)                                         \
                sv_setnv(var, (double)err) ;                            \
                sv_setpv(var, ((err) ? GetErrorString(err) : "")) ;     \
                SvNOK_on(var);

This is where the lookup is done that you said was giving "stream error",
which is would I would expect.

So after running setDUALstatus I would expect "var" to have an integer value
of -2 and a string value of "stream error". If that is the case it is
somehow getting changed before it get back to the test script.

> I am in both the Perl debugger and the VMS code debugger at this point,
> running the commands manually through the Perl debugger.
> 
> Any hints on where I should be setting code breakpoints to look for what
> is causing this error?  Or any hints at all?
> 
> I will not be able to investigate further for at least 10 hours.

No worries.

> Be aware of an issue that the length of a file as reported by stat() on
> VMS may be larger than the actual amount of bytes that are readable in
> the file.  This is due to the way that VMS stores the files on disk, and
> the only work around is to actually read the file and count the bytes.
> 
> I do not know if that may be an error, but it has tripped up other
> programs ported from UNIX.
> 
> 
> ext/Compress/Zlib/t/14gzopen.....................FAILED at test 30
> 
> I have not started looking at the 14gzopen issue yet.

It is the same issue, checking the return status from gzopen.

Paul

Reply via email to