denser error handling

This commit is contained in:
Henry Eklind 2016-07-22 00:56:37 +02:00
parent 2ece18bf05
commit 0dc1119122
No known key found for this signature in database
GPG key ID: D90EA149CDA76654
7 changed files with 26 additions and 55 deletions

View file

@ -60,11 +60,7 @@ func main() {
} }
func metaflac(path string) (err error) { func metaflac(path string) (err error) {
err = list(path) return list(path)
if err != nil {
return err
}
return nil
} }
func list(path string) (err error) { func list(path string) (err error) {

View file

@ -70,8 +70,7 @@ func New(r io.Reader) (stream *Stream, err error) {
if err != nil && err != meta.ErrReservedType { if err != nil && err != meta.ErrReservedType {
return stream, err return stream, err
} }
err = block.Skip() if err = block.Skip(); err != nil {
if err != nil {
return stream, err return stream, err
} }
isLast = block.IsLast isLast = block.IsLast
@ -137,8 +136,7 @@ func Parse(r io.Reader) (stream *Stream, err error) {
// the specification. // the specification.
// //
// ref: https://www.xiph.org/flac/format.html#format_overview // ref: https://www.xiph.org/flac/format.html#format_overview
err = block.Skip() if err = block.Skip(); err != nil {
if err != nil {
return stream, err return stream, err
} }
} }

View file

@ -132,8 +132,7 @@ func (frame *Frame) Parse() error {
// 2 bytes: CRC-16 checksum. // 2 bytes: CRC-16 checksum.
var want uint16 var want uint16
err = binary.Read(frame.r, binary.BigEndian, &want) if err = binary.Read(frame.r, binary.BigEndian, &want); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }
got := frame.crc.Sum16() got := frame.crc.Sum16()
@ -482,8 +481,7 @@ func (frame *Frame) parseHeader() error {
// 1 byte: CRC-8 checksum. // 1 byte: CRC-8 checksum.
var want uint8 var want uint8
err = binary.Read(frame.hr, binary.BigEndian, &want) if err = binary.Read(frame.hr, binary.BigEndian, &want); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }
got := h.Sum8() got := h.Sum8()

View file

@ -31,8 +31,7 @@ type Subframe struct {
func (frame *Frame) parseSubframe(bps uint) (subframe *Subframe, err error) { func (frame *Frame) parseSubframe(bps uint) (subframe *Subframe, err error) {
// Parse subframe header. // Parse subframe header.
subframe = new(Subframe) subframe = new(Subframe)
err = subframe.parseHeader(frame.br) if err = subframe.parseHeader(frame.br); err != nil {
if err != nil {
return subframe, err return subframe, err
} }
// Adjust bps of subframe for wasted bits-per-sample. // Adjust bps of subframe for wasted bits-per-sample.
@ -326,8 +325,7 @@ func (subframe *Subframe) decodeFIR(br *bits.Reader, bps uint) error {
} }
// Decode subframe residuals. // Decode subframe residuals.
err = subframe.decodeResidual(br) if err = subframe.decodeResidual(br); err != nil {
if err != nil {
return err return err
} }
@ -422,8 +420,7 @@ func (subframe *Subframe) decodeRicePart(br *bits.Reader, paramSize uint) error
// Decode the Rice encoded residuals of the partition. // Decode the Rice encoded residuals of the partition.
for j := 0; j < nsamples; j++ { for j := 0; j < nsamples; j++ {
err = subframe.decodeRiceResidual(br, param) if err = subframe.decodeRiceResidual(br, param); err != nil {
if err != nil {
return err return err
} }
} }

View file

@ -39,15 +39,13 @@ func (block *Block) parseCueSheet() error {
cs.MCN = stringFromSZ(buf) cs.MCN = stringFromSZ(buf)
// 64 bits: NLeadInSamples. // 64 bits: NLeadInSamples.
err = binary.Read(block.lr, binary.BigEndian, &cs.NLeadInSamples) if err = binary.Read(block.lr, binary.BigEndian, &cs.NLeadInSamples); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }
// 1 bit: IsCompactDisc. // 1 bit: IsCompactDisc.
var x uint8 var x uint8
err = binary.Read(block.lr, binary.BigEndian, &x) if err = binary.Read(block.lr, binary.BigEndian, &x); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }
// mask = 10000000 // mask = 10000000
@ -69,8 +67,7 @@ func (block *Block) parseCueSheet() error {
// Parse cue sheet tracks. // Parse cue sheet tracks.
// 8 bits: (number of tracks) // 8 bits: (number of tracks)
err = binary.Read(block.lr, binary.BigEndian, &x) if err = binary.Read(block.lr, binary.BigEndian, &x); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }
if x < 1 { if x < 1 {
@ -86,8 +83,7 @@ func (block *Block) parseCueSheet() error {
for i := range cs.Tracks { for i := range cs.Tracks {
// 64 bits: Offset. // 64 bits: Offset.
track := &cs.Tracks[i] track := &cs.Tracks[i]
err = binary.Read(block.lr, binary.BigEndian, &track.Offset) if err = binary.Read(block.lr, binary.BigEndian, &track.Offset); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }
if cs.IsCompactDisc && track.Offset%588 != 0 { if cs.IsCompactDisc && track.Offset%588 != 0 {
@ -95,8 +91,7 @@ func (block *Block) parseCueSheet() error {
} }
// 8 bits: Num. // 8 bits: Num.
err = binary.Read(block.lr, binary.BigEndian, &track.Num) if err = binary.Read(block.lr, binary.BigEndian, &track.Num); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }
if _, ok := uniq[track.Num]; ok { if _, ok := uniq[track.Num]; ok {
@ -131,8 +126,7 @@ func (block *Block) parseCueSheet() error {
track.ISRC = stringFromSZ(buf) track.ISRC = stringFromSZ(buf)
// 1 bit: IsAudio. // 1 bit: IsAudio.
err = binary.Read(block.lr, binary.BigEndian, &x) if err = binary.Read(block.lr, binary.BigEndian, &x); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }
// mask = 10000000 // mask = 10000000
@ -160,8 +154,7 @@ func (block *Block) parseCueSheet() error {
// Parse indicies. // Parse indicies.
// 8 bits: (number of indicies) // 8 bits: (number of indicies)
err = binary.Read(block.lr, binary.BigEndian, &x) if err = binary.Read(block.lr, binary.BigEndian, &x); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }
if x < 1 { if x < 1 {
@ -174,14 +167,12 @@ func (block *Block) parseCueSheet() error {
for i := range track.Indicies { for i := range track.Indicies {
index := &track.Indicies[i] index := &track.Indicies[i]
// 64 bits: Offset. // 64 bits: Offset.
err = binary.Read(block.lr, binary.BigEndian, &index.Offset) if err = binary.Read(block.lr, binary.BigEndian, &index.Offset); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }
// 8 bits: Num. // 8 bits: Num.
err = binary.Read(block.lr, binary.BigEndian, &index.Num) if err = binary.Read(block.lr, binary.BigEndian, &index.Num); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }

View file

@ -56,8 +56,7 @@ type Block struct {
// ignore it. // ignore it.
func New(r io.Reader) (block *Block, err error) { func New(r io.Reader) (block *Block, err error) {
block = new(Block) block = new(Block)
err = block.parseHeader(r) if err = block.parseHeader(r); err != nil {
if err != nil {
return block, err return block, err
} }
block.lr = io.LimitReader(r, block.Length) block.lr = io.LimitReader(r, block.Length)
@ -71,8 +70,7 @@ func Parse(r io.Reader) (block *Block, err error) {
if err != nil { if err != nil {
return block, err return block, err
} }
err = block.Parse() if err = block.Parse(); err != nil {
if err != nil {
return block, err return block, err
} }
return block, nil return block, nil

View file

@ -62,8 +62,7 @@ func (block *Block) parsePicture() error {
// 32 bits: (MIME type length). // 32 bits: (MIME type length).
var x uint32 var x uint32
err = binary.Read(block.lr, binary.BigEndian, &x) if err = binary.Read(block.lr, binary.BigEndian, &x); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }
@ -75,8 +74,7 @@ func (block *Block) parsePicture() error {
pic.MIME = string(buf) pic.MIME = string(buf)
// 32 bits: (description length). // 32 bits: (description length).
err = binary.Read(block.lr, binary.BigEndian, &x) if err = binary.Read(block.lr, binary.BigEndian, &x); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }
@ -88,32 +86,27 @@ func (block *Block) parsePicture() error {
pic.Desc = string(buf) pic.Desc = string(buf)
// 32 bits: Width. // 32 bits: Width.
err = binary.Read(block.lr, binary.BigEndian, &pic.Width) if err = binary.Read(block.lr, binary.BigEndian, &pic.Width); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }
// 32 bits: Height. // 32 bits: Height.
err = binary.Read(block.lr, binary.BigEndian, &pic.Height) if err = binary.Read(block.lr, binary.BigEndian, &pic.Height); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }
// 32 bits: Depth. // 32 bits: Depth.
err = binary.Read(block.lr, binary.BigEndian, &pic.Depth) if err = binary.Read(block.lr, binary.BigEndian, &pic.Depth); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }
// 32 bits: NPalColors. // 32 bits: NPalColors.
err = binary.Read(block.lr, binary.BigEndian, &pic.NPalColors) if err = binary.Read(block.lr, binary.BigEndian, &pic.NPalColors); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }
// 32 bits: (data length). // 32 bits: (data length).
err = binary.Read(block.lr, binary.BigEndian, &x) if err = binary.Read(block.lr, binary.BigEndian, &x); err != nil {
if err != nil {
return unexpected(err) return unexpected(err)
} }
if x == 0 { if x == 0 {