diff options
Diffstat (limited to 'Godeps/_workspace/src/github.com/syndtr/goleveldb/leveldb/key.go')
-rw-r--r-- | Godeps/_workspace/src/github.com/syndtr/goleveldb/leveldb/key.go | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/Godeps/_workspace/src/github.com/syndtr/goleveldb/leveldb/key.go b/Godeps/_workspace/src/github.com/syndtr/goleveldb/leveldb/key.go index 572ae8150..1443c7526 100644 --- a/Godeps/_workspace/src/github.com/syndtr/goleveldb/leveldb/key.go +++ b/Godeps/_workspace/src/github.com/syndtr/goleveldb/leveldb/key.go @@ -11,6 +11,7 @@ import ( "fmt" "github.com/syndtr/goleveldb/leveldb/errors" + "github.com/syndtr/goleveldb/leveldb/storage" ) type ErrIkeyCorrupted struct { @@ -23,7 +24,7 @@ func (e *ErrIkeyCorrupted) Error() string { } func newErrIkeyCorrupted(ikey []byte, reason string) error { - return errors.NewErrCorrupted(nil, &ErrIkeyCorrupted{append([]byte{}, ikey...), reason}) + return errors.NewErrCorrupted(storage.FileDesc{}, &ErrIkeyCorrupted{append([]byte{}, ikey...), reason}) } type kType int @@ -70,17 +71,21 @@ func init() { type iKey []byte -func newIkey(ukey []byte, seq uint64, kt kType) iKey { +func makeIkey(dst, ukey []byte, seq uint64, kt kType) iKey { if seq > kMaxSeq { panic("leveldb: invalid sequence number") } else if kt > ktVal { panic("leveldb: invalid type") } - ik := make(iKey, len(ukey)+8) - copy(ik, ukey) - binary.LittleEndian.PutUint64(ik[len(ukey):], (seq<<8)|uint64(kt)) - return ik + if n := len(ukey) + 8; cap(dst) < n { + dst = make([]byte, n) + } else { + dst = dst[:n] + } + copy(dst, ukey) + binary.LittleEndian.PutUint64(dst[len(ukey):], (seq<<8)|uint64(kt)) + return iKey(dst) } func parseIkey(ik []byte) (ukey []byte, seq uint64, kt kType, err error) { |