-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathembed.go
More file actions
37 lines (31 loc) · 996 Bytes
/
embed.go
File metadata and controls
37 lines (31 loc) · 996 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package main
import (
"embed"
"log/slog"
"os"
"path/filepath"
)
//go:embed all:embedded
var embeddedFS embed.FS
// extractEmbeddedSlipnet extracts the bundled slipnet binary to a temp directory.
// Returns the path to the extracted binary, or empty string if not embedded.
// The caller should defer os.RemoveAll on the parent directory of the returned path.
func extractEmbeddedSlipnet() (binPath string, cleanupDir string) {
data, err := embeddedFS.ReadFile("embedded/slipnet")
if err != nil || len(data) == 0 {
return "", ""
}
tmpDir, err := os.MkdirTemp("", "dns-mux-slipnet-*")
if err != nil {
slog.Warn("Failed to create temp dir for embedded slipnet", "err", err)
return "", ""
}
path := filepath.Join(tmpDir, "slipnet")
if err := os.WriteFile(path, data, 0755); err != nil {
slog.Warn("Failed to extract embedded slipnet", "err", err)
os.RemoveAll(tmpDir)
return "", ""
}
slog.Info("Extracted embedded slipnet binary", "path", path)
return path, tmpDir
}