diff --git a/c/inih/_demo/config.ini b/c/inih/_demo/config.ini new file mode 100644 index 00000000..af786095 --- /dev/null +++ b/c/inih/_demo/config.ini @@ -0,0 +1,3 @@ +[settings] +username=admin +timeout=30 diff --git a/c/inih/_demo/inihHello.go b/c/inih/_demo/inihHello.go new file mode 100644 index 00000000..f396324e --- /dev/null +++ b/c/inih/_demo/inihHello.go @@ -0,0 +1,45 @@ +package main + +import ( + "github.com/goplus/llgo/c" + "github.com/goplus/llgo/c/inih" +) + +func main() { + filename := c.Str("config.ini") + + if inih.Parse(filename, func(user c.Pointer, section *c.Char, name *c.Char, value *c.Char) c.Int { + println("section:", c.GoString(section), "name:", c.GoString(name), "value:", c.GoString(value)) + return 1 + }, nil) < 0 { + println("Error parsing config file") + return + } + + file := c.Fopen(c.Str("config.ini"), c.Str("r")) + if file == nil { + println("Error opening config file") + return + } else { + if inih.ParseFile(file, func(user c.Pointer, section *c.Char, name *c.Char, value *c.Char) c.Int { + println("section:", c.GoString(section), "name:", c.GoString(name), "value:", c.GoString(value)) + return 1 + }, nil) < 0 { + println("Error parsing config file") + return + } + c.Fclose(file) + } + + configData := "[settings]\nusername=lee\ntimeout=20" + if inih.ParseString(c.Str(configData), func(user c.Pointer, section *c.Char, name *c.Char, value *c.Char) c.Int { + println("section:", c.GoString(section), "name:", c.GoString(name), "value:", c.GoString(value)) + return 1 + }, nil) < 0 { + println("Error parsing config file") + return + } else { + println("Config file parsed successfully") + } + +} diff --git a/c/inih/inih.go b/c/inih/inih.go new file mode 100644 index 00000000..5fe1b506 --- /dev/null +++ b/c/inih/inih.go @@ -0,0 +1,24 @@ +package inih + +/* +#include +#include +*/ +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +const ( + LLGoPackage = "link: $(pkg-config --libs inih); -linih" +) + +//go:linkname Parse C.ini_parse +func Parse(filename *c.Char, handler func(user c.Pointer, section *c.Char, name *c.Char, value *c.Char) c.Int, user c.Pointer) c.Int + +//go:linkname ParseFile C.ini_parse_file +func ParseFile(file c.FilePtr, handler func(user c.Pointer, section *c.Char, name *c.Char, value *c.Char) c.Int, user c.Pointer) c.Int + +//go:linkname ParseString C.ini_parse_string +func ParseString(str *c.Char, handler func(user c.Pointer, section *c.Char, name *c.Char, value *c.Char) c.Int, user c.Pointer) c.Int