...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package sdjournal
17
18 import (
19 "github.com/coreos/go-systemd/v22/internal/dlopen"
20 "sync"
21 "unsafe"
22 )
23
24 var (
25
26 libsystemdHandle *dlopen.LibHandle
27
28 libsystemdMutex = &sync.Mutex{}
29 libsystemdFunctions = map[string]unsafe.Pointer{}
30 libsystemdNames = []string{
31
32 "libsystemd-journal.so.0",
33 "libsystemd-journal.so",
34
35
36 "libsystemd.so.0",
37 "libsystemd.so",
38 }
39 )
40
41 func getFunction(name string) (unsafe.Pointer, error) {
42 libsystemdMutex.Lock()
43 defer libsystemdMutex.Unlock()
44
45 if libsystemdHandle == nil {
46 h, err := dlopen.GetHandle(libsystemdNames)
47 if err != nil {
48 return nil, err
49 }
50
51 libsystemdHandle = h
52 }
53
54 f, ok := libsystemdFunctions[name]
55 if !ok {
56 var err error
57 f, err = libsystemdHandle.GetSymbolPointer(name)
58 if err != nil {
59 return nil, err
60 }
61
62 libsystemdFunctions[name] = f
63 }
64
65 return f, nil
66 }
67
View as plain text