aboutsummaryrefslogtreecommitdiff
path: root/db.go
diff options
context:
space:
mode:
authorBen Johnson <benbjohnson@yahoo.com>2014-01-12 14:59:03 -0700
committerBen Johnson <benbjohnson@yahoo.com>2014-01-12 14:59:03 -0700
commit746c287b262034e10ec65d9f99b232519a90546d (patch)
tree4c104ed92b08369eb3d31615939edcf02b6833b0 /db.go
parentInitial db.open. (diff)
downloaddedo-746c287b262034e10ec65d9f99b232519a90546d.tar.gz
dedo-746c287b262034e10ec65d9f99b232519a90546d.tar.xz
Add mock OS.
Diffstat (limited to 'db.go')
-rw-r--r--db.go25
1 files changed, 15 insertions, 10 deletions
diff --git a/db.go b/db.go
index bf9b39f..8176dd6 100644
--- a/db.go
+++ b/db.go
@@ -1,7 +1,7 @@
package bolt
import (
- "os"
+ . "os"
"sync"
"syscall"
"unsafe"
@@ -26,8 +26,9 @@ type DB struct {
sync.Mutex
opened bool
- file *os.File
- metafile *os.File
+ os OS
+ file *File
+ metafile *File
data []byte
buf []byte
meta0 *meta
@@ -55,18 +56,22 @@ type DB struct {
}
func NewDB() *DB {
- return &DB{}
+ return &DB{os: &sysos{}}
}
func (db *DB) Path() string {
return db.path
}
-func (db *DB) Open(path string, mode os.FileMode) error {
+func (db *DB) Open(path string, mode FileMode) error {
var err error
db.Lock()
defer db.Unlock()
+ if db.os == nil {
+ db.os = &sysos{}
+ }
+
// Exit if the database is currently open.
if db.opened {
return DatabaseAlreadyOpenedError
@@ -74,11 +79,11 @@ func (db *DB) Open(path string, mode os.FileMode) error {
// Open data file and separate sync handler for metadata writes.
db.path = path
- if db.file, err = os.OpenFile(db.path, os.O_RDWR|os.O_CREATE, mode); err != nil {
+ if db.file, err = db.os.OpenFile(db.path, O_RDWR|O_CREATE, mode); err != nil {
db.close()
return err
}
- if db.metafile, err = os.OpenFile(db.path, os.O_RDWR|os.O_SYNC, mode); err != nil {
+ if db.metafile, err = db.os.OpenFile(db.path, O_RDWR|O_SYNC, mode); err != nil {
db.close()
return err
}
@@ -140,7 +145,7 @@ func (db *DB) mmap() error {
// Determine the map size based on the file size.
var size int
- if info, err := os.Stat(db.file.Name()); err != nil {
+ if info, err := db.os.Stat(db.file.Name()); err != nil {
return err
} else if info.Size() < int64(db.pageSize*2) {
return &Error{"file size too small", nil}
@@ -169,7 +174,7 @@ func (db *DB) mmap() error {
// init creates a new database file and initializes its meta pages.
func (db *DB) init() error {
// Set the page size to the OS page size unless that is larger than max page size.
- db.pageSize = os.Getpagesize()
+ db.pageSize = db.os.Getpagesize()
if db.pageSize > maxPageSize {
db.pageSize = maxPageSize
}
@@ -765,7 +770,7 @@ func (db *DB) SetFlags(flag int, onoff bool) error {
return nil
}
-func (db *DB) Stat() *Stat {
+func (db *DB) Stat() *stat {
/*
int toggle;