Displaying 5 results from an estimated 5 matches for "pluginimpl".
2020 Apr 21
2
[PATCH nbdkit v2] Add the ability to write plugins in golang.
...ugin) GetSize(handle uintptr) (uint64, error) {
+ panic("plugin must implement GetSize()")
+}
+
+func (p Plugin) PRead(handle uintptr, buf []byte,
+ offset uint64, flags uint32) error {
+ panic("plugin must implement PRead()")
+}
+
+// The implementation of the user plugin.
+var pluginImpl PluginInterface
+
+// Callbacks from the server. These translate C to Go and back.
+
+func set_error(err error) {
+ perr, ok := err.(PluginError)
+ if ok {
+ if perr.Errno != 0 {
+ SetError(perr.Errno)
+ }
+ Error(perr.Errmsg)
+ } else {
+ Error(err.Error())
+ }
+}
+
+//export implConfig
+fu...
2020 Apr 15
2
Re: [PATCH nbdkit UNFINISHED] Add the ability to write plugins in golang.
...ds...
)
type NBDKitPlugin interface {
NBDGetFeatures() []NBDKitFeature
NBDOpen(readonly bool)
NBDClose()
NBDGetSize() int64
NBDPRead(count uint32, offset uint64, flags uint32) ([]byte)
....many other methods...
}
var plugin *C.struct_nbdkit_plugin
var pluginImpl NBDKitPlugin
func PluginInit(name string, impl NBDKitPlugin) {
pluginImpl = impl
features = impl.GetFeatures()
plugin.name = C.CString(name)
plugin.open = (*[0]byte)(C.open_wrapper)
plugin.close = (*[0]byte)(C.close_wrapper)
for _, feature := range features...
2020 Apr 23
2
Re: [PATCH nbdkit v2] Add the ability to write plugins in golang.
...ose() {
+}
+
+func (c Connection) GetSize() (uint64, error) {
+ panic("plugin must implement GetSize()")
+}
+
+func (c Connection) PRead(buf []byte, offset uint64, flags uint32) error {
+ panic("plugin must implement PRead()")
+}
+
+// The implementation of the user plugin.
+var pluginImpl PluginInterface
+var nextConnectionId uintptr
+var connectionMap map[uintptr]ConnectionInterface
+
+// Callbacks from the server. These translate C to Go and back.
+
+func set_error(err error) {
+ perr, ok := err.(PluginError)
+ if ok {
+ if perr.Errno != 0 {
+ SetError(perr.Errno)
+ }
+ Erro...
2020 Apr 21
0
Re: [PATCH nbdkit v2] Add the ability to write plugins in golang.
...offset uint64, flags uint32) error
}
Now, we need todo some mapping
var connectionID uint
var connectionMap map[uint]PluginConnectionInterface
//export implOpen
func implOpen(c_readonly C.int) unsafe.Pointer {
readonly := false
if c_readonly != 0 {
readonly = true
}
h, err := pluginImpl.Open(readonly)
if err != nil {
set_error(err)
return nil
}
if h == 0 {
panic("Open method: handle must be != 0")
}
id := connectionID++
connectionMap[id] = h
return unsafe.Pointer(uintptr(id))
}
func getConn(handle unsafe.Pointer) PluginConnectionInterface {...
2020 Apr 10
3
[PATCH nbdkit UNFINISHED] Add the ability to write plugins in golang.
Sorry Dan, but I really do dislike golang with a passion :-)
Here is a patch that allows you to write nbdkit plugins in golang. As
with C, OCaml and Rust, you can write a plugin in Go which compiles
directly to a .so file that can be loaded into golang, so in that
sense it works completely differently from scripting language plugins
like Perl and Python where there's an