Define errors
This commit is contained in:
@ -8,6 +8,13 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ErrNoSector = errors.New("sector does not exist")
|
||||||
|
ErrNoData = errors.New("data is missing")
|
||||||
|
ErrSectorNegativeLength = errors.New("declared length of data is negative")
|
||||||
|
ErrTooLarge = errors.New("data too large")
|
||||||
|
)
|
||||||
|
|
||||||
// Region contain 32*32 chunks in one .mca file
|
// Region contain 32*32 chunks in one .mca file
|
||||||
type Region struct {
|
type Region struct {
|
||||||
f io.ReadWriteSeeker
|
f io.ReadWriteSeeker
|
||||||
@ -136,7 +143,7 @@ func sectorLoc(offset int32) (sec, num int32) {
|
|||||||
func (r *Region) ReadSector(x, z int) (data []byte, err error) {
|
func (r *Region) ReadSector(x, z int) (data []byte, err error) {
|
||||||
sec, num := sectorLoc(r.offsets[z][x])
|
sec, num := sectorLoc(r.offsets[z][x])
|
||||||
if sec == 0 {
|
if sec == 0 {
|
||||||
return nil, errors.New("sector not exist")
|
return nil, ErrNoSector
|
||||||
}
|
}
|
||||||
_, err = r.f.Seek(4096*int64(sec), 0)
|
_, err = r.f.Seek(4096*int64(sec), 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -150,13 +157,13 @@ func (r *Region) ReadSector(x, z int) (data []byte, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if length == 0 {
|
if length == 0 {
|
||||||
return nil, errors.New("data is missing")
|
return nil, ErrNoData
|
||||||
}
|
}
|
||||||
if length < 0 {
|
if length < 0 {
|
||||||
return nil, errors.New("declared length of data is negative")
|
return nil, ErrSectorNegativeLength
|
||||||
}
|
}
|
||||||
if length > 4096*num {
|
if length > 4096*num {
|
||||||
return nil, errors.New("data too large")
|
return nil, ErrTooLarge
|
||||||
}
|
}
|
||||||
data = make([]byte, length)
|
data = make([]byte, length)
|
||||||
_, err = io.ReadFull(reader, data)
|
_, err = io.ReadFull(reader, data)
|
||||||
@ -171,7 +178,7 @@ func (r *Region) WriteSector(x, z int, data []byte) error {
|
|||||||
|
|
||||||
// maximum chunk size is 1MB
|
// maximum chunk size is 1MB
|
||||||
if need >= 256 {
|
if need >= 256 {
|
||||||
return errors.New("data too large")
|
return ErrTooLarge
|
||||||
}
|
}
|
||||||
|
|
||||||
if n != 0 && now == need {
|
if n != 0 && now == need {
|
||||||
|
Reference in New Issue
Block a user