aboutsummaryrefslogtreecommitdiffhomepage
path: root/check/overlay.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-03-17 15:35:58 +0900
committerOphestra <cat@gensokyo.uk>2026-03-17 15:39:03 +0900
commit6d015a949e27f20c86409c7d78053f0b0493f165 (patch)
tree4d2bc1e9596fa30ea03e4c0cc575e6a7a969249d /check/overlay.go
parente9a72490db44426605debd3cc756a7924931d706 (diff)
check: move from container
This package is not container specific, and widely used across the project. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'check/overlay.go')
-rw-r--r--check/overlay.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/check/overlay.go b/check/overlay.go
new file mode 100644
index 00000000..fbbcd1e6
--- /dev/null
+++ b/check/overlay.go
@@ -0,0 +1,30 @@
+package check
+
+import "strings"
+
+const (
+ // SpecialOverlayEscape is the escape string for overlay mount options.
+ SpecialOverlayEscape = `\`
+ // SpecialOverlayOption is the separator string between overlay mount options.
+ SpecialOverlayOption = ","
+ // SpecialOverlayPath is the separator string between overlay paths.
+ SpecialOverlayPath = ":"
+)
+
+// EscapeOverlayDataSegment escapes a string for formatting into the data
+// argument of an overlay mount system call.
+func EscapeOverlayDataSegment(s string) string {
+ if s == "" {
+ return ""
+ }
+
+ if f := strings.SplitN(s, "\x00", 2); len(f) > 0 {
+ s = f[0]
+ }
+
+ return strings.NewReplacer(
+ SpecialOverlayEscape, SpecialOverlayEscape+SpecialOverlayEscape,
+ SpecialOverlayOption, SpecialOverlayEscape+SpecialOverlayOption,
+ SpecialOverlayPath, SpecialOverlayEscape+SpecialOverlayPath,
+ ).Replace(s)
+}