| 73 | } |
| 74 | |
| 75 | func (p *parser) ParseBinaryFragmentHeader() (*BinaryFragment, error) { |
| 76 | parts := strings.SplitN(strings.TrimSuffix(p.Line(0), "\n"), " ", 2) |
| 77 | if len(parts) < 2 { |
| 78 | return nil, nil |
| 79 | } |
| 80 | |
| 81 | frag := &BinaryFragment{} |
| 82 | switch parts[0] { |
| 83 | case "delta": |
| 84 | frag.Method = BinaryPatchDelta |
| 85 | case "literal": |
| 86 | frag.Method = BinaryPatchLiteral |
| 87 | default: |
| 88 | return nil, nil |
| 89 | } |
| 90 | |
| 91 | var err error |
| 92 | if frag.Size, err = strconv.ParseInt(parts[1], 10, 64); err != nil { |
| 93 | nerr := err.(*strconv.NumError) |
| 94 | return nil, p.Errorf(0, "binary patch: invalid size: %v", nerr.Err) |
| 95 | } |
| 96 | |
| 97 | if err := p.Next(); err != nil && err != io.EOF { |
| 98 | return nil, err |
| 99 | } |
| 100 | return frag, nil |
| 101 | } |
| 102 | |
| 103 | func (p *parser) ParseBinaryChunk(frag *BinaryFragment) error { |
| 104 | // Binary fragments are encoded as a series of base85 encoded lines. Each |