Skip to content

Commit dd2fa5f

Browse files
JkLondonJkLondon
andauthored
fixed path method (#198)
* fixed path method * fix linter * fix linter * fix win string * fix win string * forgot to uncomment --------- Co-authored-by: JkLondon <me@ilyamikheev.com>
1 parent 1d2f489 commit dd2fa5f

File tree

3 files changed

+68
-64
lines changed

3 files changed

+68
-64
lines changed

mdbx/env_not_win.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,23 @@ package mdbx
77
*/
88
import "C"
99

10-
//TODO: fix me please
11-
1210
// Path returns the path argument passed to Open. Path returns a non-nil error
1311
// if env.Open() was not previously called.
1412
//
1513
// See mdbx_env_get_path.
16-
// func (env *Env) Path() (string, error) {
17-
// var cpath *C.char
18-
// ret := C.mdbx_env_get_path(env._env, &cpath)
19-
// if ret != success {
20-
// return "", operrno("mdbx_env_get_path", ret)
21-
// }
22-
// if cpath == nil {
23-
// return "", errNotOpen
24-
// }
25-
// return C.GoString(cpath), nil
26-
//}
14+
//
15+
//nolint:gocritic // reason: false positive on dupSubExpr
16+
func (env *Env) Path() (string, error) {
17+
var cpath *C.char
18+
ret := C.mdbx_env_get_path(env._env, &cpath)
19+
if ret != success {
20+
return "", operrno("mdbx_env_get_path", ret)
21+
}
22+
if cpath == nil {
23+
return "", errNotOpen
24+
}
25+
return C.GoString(cpath), nil
26+
}
2727

2828
// FD returns the open file descriptor (or Windows file handle) for the given
2929
// environment. An error is returned if the environment has not been

mdbx/env_test.go

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -7,44 +7,44 @@ import (
77
"testing"
88
)
99

10-
// func TestEnv_Path_notOpen(t *testing.T) {
11-
// env, err := NewEnv()
12-
// if err != nil {
13-
// t.Fatalf("create: %v", err)
14-
// }
15-
// defer env.Close()
16-
//
17-
// // before Open the Path method returns "" and a non-nil error.
18-
// path, err := env.Path()
19-
// if err == nil {
20-
// t.Errorf("no error returned before Open")
21-
// }
22-
// if path != "" {
23-
// t.Errorf("non-zero path returned before Open")
24-
// }
25-
//}
26-
//
27-
// func TestEnv_Path(t *testing.T) {
28-
// env, err := NewEnv()
29-
// if err != nil {
30-
// t.Fatalf("create: %v", err)
31-
// }
32-
//
33-
// // open an environment
34-
// dir := t.TempDir()
35-
// err = env.Open(dir, 0, 0644)
36-
// defer env.Close()
37-
// if err != nil {
38-
// t.Errorf("open: %v", err)
39-
// }
40-
// path, err := env.Path()
41-
// if err != nil {
42-
// t.Errorf("path: %v", err)
43-
// }
44-
// if path != dir {
45-
// t.Errorf("path: %q (!= %q)", path, dir)
46-
// }
47-
//}
10+
func TestEnv_Path_notOpen(t *testing.T) {
11+
env, err := NewEnv(Default)
12+
if err != nil {
13+
t.Fatalf("create: %v", err)
14+
}
15+
defer env.Close()
16+
17+
// before Open the Path method returns "" and a non-nil error.
18+
path, err := env.Path()
19+
if err == nil {
20+
t.Errorf("no error returned before Open")
21+
}
22+
if path != "" {
23+
t.Errorf("non-zero path returned before Open")
24+
}
25+
}
26+
27+
func TestEnv_Path(t *testing.T) {
28+
env, err := NewEnv(Default)
29+
if err != nil {
30+
t.Fatalf("create: %v", err)
31+
}
32+
33+
// open an environment
34+
dir := t.TempDir()
35+
err = env.Open(dir, 0, 0644)
36+
defer env.Close()
37+
if err != nil {
38+
t.Errorf("open: %v", err)
39+
}
40+
path, err := env.Path()
41+
if err != nil {
42+
t.Errorf("path: %v", err)
43+
}
44+
if path != dir {
45+
t.Errorf("path: %q (!= %q)", path, dir)
46+
}
47+
}
4848

4949
func TestEnv_Open_notExist(t *testing.T) {
5050
env, err := NewEnv(Default)

mdbx/env_windows.go

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,24 @@ package mdbx
44
#include "mdbxgo.h"
55
*/
66
import "C"
7-
import "unsafe"
7+
import (
8+
"unsafe"
89

9-
// TODO: fix me please
10-
//func (env *Env) Path() (string, error) {
11-
// var cpath *C.wchar_t
12-
// ret := C.mdbx_env_get_pathW(env._env, &cpath)
13-
// if ret != success {
14-
// return "", operrno("mdbx_env_get_path", ret)
15-
// }
16-
// if cpath == nil {
17-
// return "", errNotOpen
18-
// }
19-
// return C.GoString(cpath), nil
20-
//}
10+
"golang.org/x/sys/windows"
11+
)
12+
13+
func (env *Env) Path() (string, error) {
14+
var cpath *C.wchar_t
15+
ret := C.mdbx_env_get_pathW(env._env, &cpath)
16+
if ret != success {
17+
return "", operrno("mdbx_env_get_path", ret)
18+
}
19+
if cpath == nil {
20+
return "", errNotOpen
21+
}
22+
23+
return windows.UTF16PtrToString((*uint16)(unsafe.Pointer(cpath))), nil
24+
}
2125

2226
// FD returns the open file descriptor (or Windows file handle) for the given
2327
// environment. An error is returned if the environment has not been

0 commit comments

Comments
 (0)