github.com/10XDev/rclone@v1.52.3-0.20200626220027-16af9ab76b2a/lib/plugin/plugin.go (about) 1 // +build darwin linux 2 3 package plugin 4 5 import ( 6 "fmt" 7 "io/ioutil" 8 "os" 9 "path/filepath" 10 "plugin" 11 "strings" 12 ) 13 14 func init() { 15 dir := os.Getenv("RCLONE_PLUGIN_PATH") 16 if dir == "" { 17 return 18 } 19 // Get file names of plugin dir 20 listing, err := ioutil.ReadDir(dir) 21 if err != nil { 22 fmt.Fprintln(os.Stderr, "Failed to open plugin directory:", err) 23 } 24 // Enumerate file names, load valid plugins 25 for _, file := range listing { 26 // Match name 27 fileName := file.Name() 28 if !strings.HasPrefix(fileName, "librcloneplugin_") { 29 continue 30 } 31 if !strings.HasSuffix(fileName, ".so") { 32 continue 33 } 34 // Try to load plugin 35 _, err := plugin.Open(filepath.Join(dir, fileName)) 36 if err != nil { 37 fmt.Fprintf(os.Stderr, "Failed to load plugin %s: %s\n", 38 fileName, err) 39 } 40 } 41 }