Skip to content

Commit

Permalink
gzip: Add to_deflate/from_deflate functions
Browse files Browse the repository at this point in the history
  • Loading branch information
wader committed Jun 6, 2023
1 parent 7e2a10c commit dcfabdf
Showing 1 changed file with 48 additions and 0 deletions.
48 changes: 48 additions & 0 deletions format/gzip/gzip.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@ package gz
// TODO: verify isize?

import (
"bytes"
"compress/flate"
"hash/crc32"
"io"
"time"

"github.com/wader/fq/format"
"github.com/wader/fq/pkg/bitio"
"github.com/wader/fq/pkg/decode"
"github.com/wader/fq/pkg/interp"
"github.com/wader/fq/pkg/scalar"
Expand All @@ -29,6 +31,8 @@ func init() {
{Groups: []*decode.Group{format.Probe}, Out: &probeGroup},
},
})
interp.RegisterFunc0("from_deflate", fromDeflate)
interp.RegisterFunc0("to_deflate", toDeflate)
}

const deflateMethod = 8
Expand Down Expand Up @@ -126,3 +130,47 @@ func gzDecode(d *decode.D) any {

return nil
}

func fromDeflate(_ *interp.Interp, c any) any {
inBR, err := interp.ToBitReader(c)
if err != nil {
return err
}

fr := flate.NewReader(bitio.NewIOReader(inBR))
b := &bytes.Buffer{}
//nolint:gosec
if _, err := io.Copy(b, fr); err != nil {
return err
}
fr.Close()

bb, err := interp.NewBinaryFromBitReader(bitio.NewBitReader(b.Bytes(), -1), 8, 0)
if err != nil {
return err
}
return bb
}

func toDeflate(_ *interp.Interp, c any) any {
inBR, err := interp.ToBitReader(c)
if err != nil {
return err
}

bb := &bytes.Buffer{}
fw, err := flate.NewWriter(bb, 9) // TODO: level option
if err != nil {
return err
}
if _, err := io.Copy(fw, bitio.NewIOReader(inBR)); err != nil {
return err
}
fw.Close()

bib, err := interp.NewBinaryFromBitReader(bitio.NewBitReader(bb.Bytes(), -1), 8, 0)
if err != nil {
return err
}
return bib
}

0 comments on commit dcfabdf

Please sign in to comment.