| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- // Copyright 2014 The lldb Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- // Some errors returned by this package.
- //
- // Note that this package can return more errors than declared here, for
- // example io.EOF from Filer.ReadAt().
- package lldb
- import (
- "fmt"
- )
- // ErrDecodeScalars is possibly returned from DecodeScalars
- type ErrDecodeScalars struct {
- B []byte // Data being decoded
- I int // offending offset
- }
- // Error implements the built in error type.
- func (e *ErrDecodeScalars) Error() string {
- return fmt.Sprintf("DecodeScalars: corrupted data @ %d/%d", e.I, len(e.B))
- }
- // ErrINVAL reports invalid values passed as parameters, for example negative
- // offsets where only non-negative ones are allowed or read from the DB.
- type ErrINVAL struct {
- Src string
- Val interface{}
- }
- // Error implements the built in error type.
- func (e *ErrINVAL) Error() string {
- return fmt.Sprintf("%s: %+v", e.Src, e.Val)
- }
- // ErrPERM is for example reported when a Filer is closed while BeginUpdate(s)
- // are not balanced with EndUpdate(s)/Rollback(s) or when EndUpdate or Rollback
- // is invoked which is not paired with a BeginUpdate.
- type ErrPERM struct {
- Src string
- }
- // Error implements the built in error type.
- func (e *ErrPERM) Error() string {
- return fmt.Sprintf("%s: Operation not permitted", e.Src)
- }
- // ErrTag represents an ErrILSEQ kind.
- type ErrType int
- // ErrILSEQ types
- const (
- ErrOther ErrType = iota
- ErrAdjacentFree // Adjacent free blocks (.Off and .Arg)
- ErrDecompress // Used compressed block: corrupted compression
- ErrExpFreeTag // Expected a free block tag, got .Arg
- ErrExpUsedTag // Expected a used block tag, got .Arg
- ErrFLT // Free block is invalid or referenced multiple times
- ErrFLTLoad // FLT truncated to .Off, need size >= .Arg
- ErrFLTSize // Free block size (.Arg) doesn't belong to its list min size: .Arg2
- ErrFileSize // File .Name size (.Arg) != 0 (mod 16)
- ErrFreeChaining // Free block, .prev.next doesn't point back to this block
- ErrFreeTailBlock // Last block is free
- ErrHead // Head of a free block list has non zero Prev (.Arg)
- ErrInvalidRelocTarget // Reloc doesn't target (.Arg) a short or long used block
- ErrInvalidWAL // Corrupted write ahead log. .Name: file name, .More: more
- ErrLongFreeBlkTooLong // Long free block spans beyond EOF, size .Arg
- ErrLongFreeBlkTooShort // Long free block must have at least 2 atoms, got only .Arg
- ErrLongFreeNextBeyondEOF // Long free block .Next (.Arg) spans beyond EOF
- ErrLongFreePrevBeyondEOF // Long free block .Prev (.Arg) spans beyond EOF
- ErrLongFreeTailTag // Expected a long free block tail tag, got .Arg
- ErrLostFreeBlock // Free block is not in any FLT list
- ErrNullReloc // Used reloc block with nil target
- ErrRelocBeyondEOF // Used reloc points (.Arg) beyond EOF
- ErrShortFreeTailTag // Expected a short free block tail tag, got .Arg
- ErrSmall // Request for a free block (.Arg) returned a too small one (.Arg2) at .Off
- ErrTailTag // Block at .Off has invalid tail CC (compression code) tag, got .Arg
- ErrUnexpReloc // Unexpected reloc block referred to from reloc block .Arg
- ErrVerifyPadding // Used block has nonzero padding
- ErrVerifyTailSize // Long free block size .Arg but tail size .Arg2
- ErrVerifyUsedSpan // Used block size (.Arg) spans beyond EOF
- )
- // ErrILSEQ reports a corrupted file format. Details in fields according to Type.
- type ErrILSEQ struct {
- Type ErrType
- Off int64
- Arg int64
- Arg2 int64
- Arg3 int64
- Name string
- More interface{}
- }
- // Error implements the built in error type.
- func (e *ErrILSEQ) Error() string {
- switch e.Type {
- case ErrAdjacentFree:
- return fmt.Sprintf("Adjacent free blocks at offset %#x and %#x", e.Off, e.Arg)
- case ErrDecompress:
- return fmt.Sprintf("Compressed block at offset %#x: Corrupted compressed content", e.Off)
- case ErrExpFreeTag:
- return fmt.Sprintf("Block at offset %#x: Expected a free block tag, got %#2x", e.Off, e.Arg)
- case ErrExpUsedTag:
- return fmt.Sprintf("Block at ofset %#x: Expected a used block tag, got %#2x", e.Off, e.Arg)
- case ErrFLT:
- return fmt.Sprintf("Free block at offset %#x is invalid or referenced multiple times", e.Off)
- case ErrFLTLoad:
- return fmt.Sprintf("FLT truncated to size %d, expected at least %d", e.Off, e.Arg)
- case ErrFLTSize:
- return fmt.Sprintf("Free block at offset %#x has size (%#x) should be at least (%#x)", e.Off, e.Arg, e.Arg2)
- case ErrFileSize:
- return fmt.Sprintf("File %q size (%#x) != 0 (mod 16)", e.Name, e.Arg)
- case ErrFreeChaining:
- return fmt.Sprintf("Free block at offset %#x: .prev.next doesn point back here.", e.Off)
- case ErrFreeTailBlock:
- return fmt.Sprintf("Free block at offset %#x: Cannot be last file block", e.Off)
- case ErrHead:
- return fmt.Sprintf("Block at offset %#x: Head of free block list has non zero .prev %#x", e.Off, e.Arg)
- case ErrInvalidRelocTarget:
- return fmt.Sprintf("Used reloc block at offset %#x: Target (%#x) is not a short or long used block", e.Off, e.Arg)
- case ErrInvalidWAL:
- return fmt.Sprintf("Corrupted write ahead log file: %q %v", e.Name, e.More)
- case ErrLongFreeBlkTooLong:
- return fmt.Sprintf("Long free block at offset %#x: Size (%#x) beyond EOF", e.Off, e.Arg)
- case ErrLongFreeBlkTooShort:
- return fmt.Sprintf("Long free block at offset %#x: Size (%#x) too small", e.Off, e.Arg)
- case ErrLongFreeNextBeyondEOF:
- return fmt.Sprintf("Long free block at offset %#x: Next (%#x) points beyond EOF", e.Off, e.Arg)
- case ErrLongFreePrevBeyondEOF:
- return fmt.Sprintf("Long free block at offset %#x: Prev (%#x) points beyond EOF", e.Off, e.Arg)
- case ErrLongFreeTailTag:
- return fmt.Sprintf("Block at offset %#x: Expected long free tail tag, got %#2x", e.Off, e.Arg)
- case ErrLostFreeBlock:
- return fmt.Sprintf("Free block at offset %#x: not in any FLT list", e.Off)
- case ErrNullReloc:
- return fmt.Sprintf("Used reloc block at offset %#x: Nil target", e.Off)
- case ErrRelocBeyondEOF:
- return fmt.Sprintf("Used reloc block at offset %#x: Link (%#x) points beyond EOF", e.Off, e.Arg)
- case ErrShortFreeTailTag:
- return fmt.Sprintf("Block at offset %#x: Expected short free tail tag, got %#2x", e.Off, e.Arg)
- case ErrSmall:
- return fmt.Sprintf("Request for of free block of size %d returned a too small (%d) one at offset %#x", e.Arg, e.Arg2, e.Off)
- case ErrTailTag:
- return fmt.Sprintf("Block at offset %#x: Invalid tail CC tag, got %#2x", e.Off, e.Arg)
- case ErrUnexpReloc:
- return fmt.Sprintf("Block at offset %#x: Unexpected reloc block. Referred to from reloc block at offset %#x", e.Off, e.Arg)
- case ErrVerifyPadding:
- return fmt.Sprintf("Used block at offset %#x: Nonzero padding", e.Off)
- case ErrVerifyTailSize:
- return fmt.Sprintf("Long free block at offset %#x: Size %#x, but tail size %#x", e.Off, e.Arg, e.Arg2)
- case ErrVerifyUsedSpan:
- return fmt.Sprintf("Used block at offset %#x: Size %#x spans beyond EOF", e.Off, e.Arg)
- }
- more := ""
- if e.More != nil {
- more = fmt.Sprintf(", %v", e.More)
- }
- off := ""
- if e.Off != 0 {
- off = fmt.Sprintf(", off: %#x", e.Off)
- }
- return fmt.Sprintf("Error%s%s", off, more)
- }
|