~ubuntu-branches/ubuntu/jaunty/kde4libs/jaunty

« back to all changes in this revision

Viewing changes to kdecore/compression/kgzipfilter.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Andreas Wenning, Jonathan Thomas, Andreas Wenning
  • Date: 2009-04-01 05:55:52 UTC
  • mfrom: (1.1.29 upstream)
  • Revision ID: james.westby@ubuntu.com-20090401055552-uel5di5f3xiftax3
Tags: 4:4.2.2-0ubuntu1
[ Jonathan Thomas ]
* New upstream release (LP: #344709, #348823):
  - Bump upstreamversion and runtimedeps in debian/rules
  - Remove kubuntu_65_kcmdlineargs_decoding_svn934640.diff, applied upstream

[ Andreas Wenning ]
* Remove patch kubuntu_69_do_not_show_plasma_popups_over_screensaver.diff,
  applied upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
43
43
        zStream.zfree = (free_func)0;
44
44
        zStream.opaque = (voidpf)0;
45
45
        headerWritten = false;
 
46
        footerWritten = false;
46
47
        compressed = false;
47
48
        mode = 0;
48
49
    }
49
50
 
50
51
    z_stream zStream;
51
52
    bool headerWritten;
 
53
    bool footerWritten;
52
54
    bool compressed;
53
55
    int mode;
54
56
    ulong crc;
86
88
    d->mode = mode;
87
89
    d->compressed = true;
88
90
    d->headerWritten = false;
 
91
    d->footerWritten = false;
89
92
}
90
93
 
91
94
int KGzipFilter::mode() const
121
124
        if ( result != Z_OK )
122
125
            kDebug(7005) << "deflateReset returned " << result;
123
126
        d->headerWritten = false;
 
127
        d->footerWritten = false;
124
128
    }
125
129
}
126
130
 
127
131
bool KGzipFilter::readHeader()
128
132
{
129
133
#ifdef DEBUG_GZIP
130
 
    kDebug(7005) << "KGzipFilter::readHeader avail=" << d->zStream.avail_in;
 
134
    kDebug(7005) << "avail=" << d->zStream.avail_in;
131
135
#endif
132
136
    // Assume not compressed until we successfully decode the header
133
137
    d->compressed = false;
139
143
    int i = d->zStream.avail_in;
140
144
    if ((i -= 10)  < 0) return false; // Need at least 10 bytes
141
145
#ifdef DEBUG_GZIP
142
 
    kDebug(7005) << "KGzipFilter::readHeader first byte is " << QString::number(*p,16);
 
146
    kDebug(7005) << "first byte is " << QString::number(*p,16);
143
147
#endif
144
148
    if (*p++ != 0x1f) return false; // GZip magic
145
149
#ifdef DEBUG_GZIP
146
 
    kDebug(7005) << "KGzipFilter::readHeader second byte is " << QString::number(*p,16);
 
150
    kDebug(7005) << "second byte is " << QString::number(*p,16);
147
151
#endif
148
152
    if (*p++ != 0x8b) return false;
149
153
    int method = *p++;
234
238
{
235
239
    Q_ASSERT( d->headerWritten );
236
240
    if (!d->headerWritten) kDebug() << kBacktrace();
 
241
    Q_ASSERT(!d->footerWritten);
237
242
    Bytef *p = d->zStream.next_out;
238
243
    int i = d->zStream.avail_out;
239
 
    //kDebug(7005) << "KGzipFilter::writeFooter writing CRC= " << QString::number( d->crc, 16 );
 
244
    //kDebug(7005) << "avail_out=" << i << "writing CRC=" << QString::number(d->crc, 16) << "at p=" << p;
240
245
    put_long( d->crc );
241
 
    //kDebug(7005) << "KGzipFilter::writing writing totalin= " << d->zStream.total_in;
 
246
    //kDebug(7005) << "writing totalin=" << d->zStream.total_in << "at p=" << p;
242
247
    put_long( d->zStream.total_in );
243
248
    i -= p - d->zStream.next_out;
244
249
    d->zStream.next_out = p;
245
250
    d->zStream.avail_out = i;
 
251
    d->footerWritten = true;
246
252
}
247
253
 
248
254
void KGzipFilter::setOutBuffer( char * data, uint maxlen )
253
259
void KGzipFilter::setInBuffer( const char * data, uint size )
254
260
{
255
261
#ifdef DEBUG_GZIP
256
 
    kDebug(7005) << "KGzipFilter::setInBuffer avail_in=" << size;
 
262
    kDebug(7005) << "avail_in=" << size;
257
263
#endif
258
264
    d->zStream.avail_in = size;
259
265
    d->zStream.next_in = (Bytef*) data;
317
323
#ifdef DEBUG_GZIP
318
324
    kDebug(7005) << "  calling deflate with avail_in=" << inBufferAvailable() << " avail_out=" << outBufferAvailable();
319
325
#endif
320
 
    int result = deflate(&d->zStream, finish ? Z_FINISH : Z_NO_FLUSH);
 
326
    const int result = deflate(&d->zStream, finish ? Z_FINISH : Z_NO_FLUSH);
321
327
    if ( result != Z_OK && result != Z_STREAM_END )
322
328
        kDebug(7005) << "  deflate returned " << result;
323
329
    if ( d->headerWritten )
325
331
        //kDebug(7005) << "Computing CRC for the next " << len - d->zStream.avail_in << " bytes";
326
332
        d->crc = crc32(d->crc, p, len - d->zStream.avail_in);
327
333
    }
328
 
    if ( result == Z_STREAM_END && d->headerWritten )
329
 
    {
330
 
        //kDebug(7005) << "KGzipFilter::compress finished, write footer";
331
 
        writeFooter();
 
334
    KGzipFilter::Result callerResult = result == Z_OK ? KFilterBase::Ok : (Z_STREAM_END ? KFilterBase::End : KFilterBase::Error);
 
335
 
 
336
    if (result == Z_STREAM_END && d->headerWritten && !d->footerWritten) {
 
337
        if (d->zStream.avail_out >= 8 /*footer size*/) {
 
338
            //kDebug(7005) << "finished, write footer";
 
339
            writeFooter();
 
340
        } else {
 
341
            // No room to write the footer (#157706/#188415), we'll have to do it on the next pass.
 
342
            //kDebug(7005) << "finished, but no room for footer yet";
 
343
            callerResult = KFilterBase::Ok;
 
344
        }
332
345
    }
333
 
    return ( result == Z_OK ? KFilterBase::Ok : ( result == Z_STREAM_END ? KFilterBase::End : KFilterBase::Error ) );
 
346
    return callerResult;
334
347
}