2017-05-22 2 views
-1

Wie habe ich zlib die gzip footer für mich ausgeben? Ich mache es gerade selbst, aber es wäre schön, wenn Zlib es für mich tun könnte.Wie gebe ich zlib den gzip footer aus?

shared_data xcc_z::gzip(data_ref s) 
{ 
    z_stream stream; 
    stream.zalloc = NULL; 
    stream.zfree = NULL; 
    stream.opaque = NULL; 
    if (deflateInit2(&stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 16 + MAX_WBITS, MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY)) 
    { 
    assert(false); 
    return {}; 
    } 
    shared_data d(deflateBound(&stream, s.size()) + 8); 
    stream.next_in = const_cast<unsigned char*>(s.data()); 
    stream.avail_in = s.size(); 
    stream.next_out = d.data(); 
    stream.avail_out = d.size() - 8; 
    deflate(&stream, Z_FINISH); 
    deflateEnd(&stream); 
    unsigned char* w = stream.next_out; 
    w = write_int_le(4, w, crc32(crc32(0, NULL, 0), s.data(), s.size())); 
    w = write_int_le(4, w, s.size()); 
    return d.substr(0, w - d.data()); 
} 

Antwort

1

Warum denkst du es nicht? Dein Code fügt einen nutzlosen zweiten Trailer nach dem bereits von zlib geschriebenen hinzu.

+0

Mein schlecht, ich dachte irgendwie, es würde nur den Header tun. Bevor ich selbst den Header gemacht habe, bin ich mir nicht sicher, wann die +16-Funktion hinzugefügt wurde. Übrigens habe ich dir auch @ [email protected] per E-Mail über ein nicht verwandtes Problem geschrieben. Ist diese Adresse korrekt? Eine benannte Konstante für die 16 könnte auch nett sein. – XTF

Verwandte Themen