Config#LookupString uses git_buf to load value
diff --git a/config.go b/config.go
index 9d25e35..c4c4028 100644
--- a/config.go
+++ b/config.go
@@ -115,18 +115,20 @@
}
func (c *Config) LookupString(name string) (string, error) {
- var ptr *C.char
cname := C.CString(name)
defer C.free(unsafe.Pointer(cname))
+ valBuf := C.git_buf{}
+
runtime.LockOSThread()
defer runtime.UnlockOSThread()
- if ret := C.git_config_get_string(&ptr, c.ptr, cname); ret < 0 {
+ if ret := C.git_config_get_string_buf(&valBuf, c.ptr, cname); ret < 0 {
return "", MakeGitError(ret)
}
+ defer C.git_buf_free(&valBuf)
- return C.GoString(ptr), nil
+ return C.GoString(valBuf.ptr), nil
}
func (c *Config) LookupBool(name string) (bool, error) {
diff --git a/config_test.go b/config_test.go
new file mode 100644
index 0000000..e4a2c1f
--- /dev/null
+++ b/config_test.go
@@ -0,0 +1,58 @@
+package git
+
+import (
+ "os"
+ "testing"
+)
+
+func setupConfig() (*Config, error) {
+ var (
+ c *Config
+ err error
+ p string
+ )
+
+ p, err = ConfigFindGlobal()
+ if err != nil {
+ return nil, err
+ }
+
+ c, err = OpenOndisk(nil, p)
+ if err != nil {
+ return nil, err
+ }
+
+ c.SetString("foo.bar", "baz")
+
+ return c, err
+}
+
+func cleanupConfig() {
+ os.Remove(tempConfig)
+}
+
+func TestConfigLookupString(t *testing.T) {
+ var (
+ err error
+ val string
+ c *Config
+ )
+
+ c, err = setupConfig()
+ defer cleanupConfig()
+ if err != nil {
+ t.Errorf("Setup error: '%v'. Expected none\n", err)
+ t.FailNow()
+ }
+ defer c.Free()
+
+ val, err = c.LookupString("foo.bar")
+ if err != nil {
+ t.Errorf("Got error: '%v', expected none\n", err)
+ t.FailNow()
+ }
+
+ if val != "baz" {
+ t.Errorf("Got '%s', expected 'bar'\n", val)
+ }
+}