diff --git a/mdbx/env_not_win.go b/mdbx/env_not_win.go index 5ca8ee9..f97523d 100644 --- a/mdbx/env_not_win.go +++ b/mdbx/env_not_win.go @@ -7,23 +7,23 @@ package mdbx */ import "C" -//TODO: fix me please - // Path returns the path argument passed to Open. Path returns a non-nil error // if env.Open() was not previously called. // // See mdbx_env_get_path. -// func (env *Env) Path() (string, error) { -// var cpath *C.char -// ret := C.mdbx_env_get_path(env._env, &cpath) -// if ret != success { -// return "", operrno("mdbx_env_get_path", ret) -// } -// if cpath == nil { -// return "", errNotOpen -// } -// return C.GoString(cpath), nil -//} +// +//nolint:gocritic // reason: false positive on dupSubExpr +func (env *Env) Path() (string, error) { + var cpath *C.char + ret := C.mdbx_env_get_path(env._env, &cpath) + if ret != success { + return "", operrno("mdbx_env_get_path", ret) + } + if cpath == nil { + return "", errNotOpen + } + return C.GoString(cpath), nil +} // FD returns the open file descriptor (or Windows file handle) for the given // environment. An error is returned if the environment has not been diff --git a/mdbx/env_test.go b/mdbx/env_test.go index dfb6642..71ff75f 100644 --- a/mdbx/env_test.go +++ b/mdbx/env_test.go @@ -7,44 +7,44 @@ import ( "testing" ) -// func TestEnv_Path_notOpen(t *testing.T) { -// env, err := NewEnv() -// if err != nil { -// t.Fatalf("create: %v", err) -// } -// defer env.Close() -// -// // before Open the Path method returns "" and a non-nil error. -// path, err := env.Path() -// if err == nil { -// t.Errorf("no error returned before Open") -// } -// if path != "" { -// t.Errorf("non-zero path returned before Open") -// } -//} -// -// func TestEnv_Path(t *testing.T) { -// env, err := NewEnv() -// if err != nil { -// t.Fatalf("create: %v", err) -// } -// -// // open an environment -// dir := t.TempDir() -// err = env.Open(dir, 0, 0644) -// defer env.Close() -// if err != nil { -// t.Errorf("open: %v", err) -// } -// path, err := env.Path() -// if err != nil { -// t.Errorf("path: %v", err) -// } -// if path != dir { -// t.Errorf("path: %q (!= %q)", path, dir) -// } -//} +func TestEnv_Path_notOpen(t *testing.T) { + env, err := NewEnv(Default) + if err != nil { + t.Fatalf("create: %v", err) + } + defer env.Close() + + // before Open the Path method returns "" and a non-nil error. + path, err := env.Path() + if err == nil { + t.Errorf("no error returned before Open") + } + if path != "" { + t.Errorf("non-zero path returned before Open") + } +} + +func TestEnv_Path(t *testing.T) { + env, err := NewEnv(Default) + if err != nil { + t.Fatalf("create: %v", err) + } + + // open an environment + dir := t.TempDir() + err = env.Open(dir, 0, 0644) + defer env.Close() + if err != nil { + t.Errorf("open: %v", err) + } + path, err := env.Path() + if err != nil { + t.Errorf("path: %v", err) + } + if path != dir { + t.Errorf("path: %q (!= %q)", path, dir) + } +} func TestEnv_Open_notExist(t *testing.T) { env, err := NewEnv(Default) diff --git a/mdbx/env_windows.go b/mdbx/env_windows.go index 3771238..5a2fc44 100644 --- a/mdbx/env_windows.go +++ b/mdbx/env_windows.go @@ -4,20 +4,24 @@ package mdbx #include "mdbxgo.h" */ import "C" -import "unsafe" +import ( + "unsafe" -// TODO: fix me please -//func (env *Env) Path() (string, error) { -// var cpath *C.wchar_t -// ret := C.mdbx_env_get_pathW(env._env, &cpath) -// if ret != success { -// return "", operrno("mdbx_env_get_path", ret) -// } -// if cpath == nil { -// return "", errNotOpen -// } -// return C.GoString(cpath), nil -//} + "golang.org/x/sys/windows" +) + +func (env *Env) Path() (string, error) { + var cpath *C.wchar_t + ret := C.mdbx_env_get_pathW(env._env, &cpath) + if ret != success { + return "", operrno("mdbx_env_get_path", ret) + } + if cpath == nil { + return "", errNotOpen + } + + return windows.UTF16PtrToString((*uint16)(unsafe.Pointer(cpath))), nil +} // FD returns the open file descriptor (or Windows file handle) for the given // environment. An error is returned if the environment has not been