aboutsummaryrefslogtreecommitdiffhomepage
path: root/sandbox/vfs/mangle.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-03-20 19:04:10 +0900
committerOphestra <cat@gensokyo.uk>2025-03-21 00:35:49 +0900
commit9ddf5794dd6eb5222fc1cccceb7d27c7cbd9c785 (patch)
tree261224f8438bbf3149a3b6cc0b1d155834085292 /sandbox/vfs/mangle.go
parentb74a08dda968a161e066c92c1bf5b4489e5a4fbd (diff)
sandbox/vfs: implement proc_pid_mountinfo(5) parser
Test cases are mostly taken from util-linux. This implementation is more correct and slightly faster than the one found in github:kubernetes/utils. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'sandbox/vfs/mangle.go')
-rw-r--r--sandbox/vfs/mangle.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/sandbox/vfs/mangle.go b/sandbox/vfs/mangle.go
new file mode 100644
index 00000000..83aba589
--- /dev/null
+++ b/sandbox/vfs/mangle.go
@@ -0,0 +1,30 @@
+package vfs
+
+import "strings"
+
+func Unmangle(s string) string {
+ if !strings.ContainsRune(s, '\\') {
+ return s
+ }
+
+ v := make([]byte, len(s))
+ var (
+ j int
+ c byte
+ )
+ for i := 0; i < len(s); i++ {
+ c = s[i]
+ if c == '\\' && len(s) > i+3 &&
+ (s[i+1] == '0' || s[i+1] == '1') &&
+ (s[i+2] >= '0' && s[i+2] <= '7') &&
+ (s[i+3] >= '0' && s[i+3] <= '7') {
+ c = ((s[i+1] - '0') << 6) |
+ ((s[i+2] - '0') << 3) |
+ (s[i+3] - '0')
+ i += 3
+ }
+ v[j] = c
+ j++
+ }
+ return string(v[:j])
+}