From 4ad445aa8546d19a9bb9a34a5d3c27cd5a158fd9 Mon Sep 17 00:00:00 2001 From: Ben Johnson Date: Wed, 29 Jan 2014 22:50:29 -0500 Subject: Add freelist page type. --- db.go | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'db.go') diff --git a/db.go b/db.go index bca4d56..a29b517 100644 --- a/db.go +++ b/db.go @@ -146,18 +146,34 @@ func (db *DB) init() error { db.pageSize = db.os.Getpagesize() // Create two meta pages on a buffer. - buf := make([]byte, db.pageSize*2) + buf := make([]byte, db.pageSize*4) for i := 0; i < 2; i++ { p := db.pageInBuffer(buf[:], pgid(i)) p.id = pgid(i) p.flags = p_meta + // Initialize the meta page. m := p.meta() m.magic = magic m.version = Version m.pageSize = uint32(db.pageSize) + m.version = Version + m.free = 3 + m.sys.root = 4 } + // Write an empty freelist at page 3. + p := db.pageInBuffer(buf[:], pgid(2)) + p.id = pgid(3) + p.flags = p_freelist + p.count = 0 + + // Write an empty leaf page at page 4. + p = db.pageInBuffer(buf[:], pgid(3)) + p.id = pgid(4) + p.flags = p_leaf + p.count = 0 + // Write the buffer to our data file. if _, err := db.metafile.WriteAt(buf, 0); err != nil { return err -- cgit v1.2.3