master
go 33 lines 620 Bytes
Raw
1 // Plugin loading with cgo (uses dlopen to load .so plugins at runtime).
2 //go:build (linux || darwin || freebsd) && cgo && !noplugin
3
4 package loader
5
6 import (
7 "errors"
8 "plugin"
9
10 iplugin "github.com/ipfs/kubo/plugin"
11 )
12
13 func init() {
14 loadPluginFunc = unixLoadPlugin
15 }
16
17 func unixLoadPlugin(fi string) ([]iplugin.Plugin, error) {
18 pl, err := plugin.Open(fi)
19 if err != nil {
20 return nil, err
21 }
22 pls, err := pl.Lookup("Plugins")
23 if err != nil {
24 return nil, err
25 }
26
27 typePls, ok := pls.(*[]iplugin.Plugin)
28 if !ok {
29 return nil, errors.New("filed 'Plugins' didn't contain correct type")
30 }
31
32 return *typePls, nil
33 }