aboutsummaryrefslogtreecommitdiffhomepage
path: root/system/dispatcher.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-09-08 03:22:10 +0900
committerOphestra <cat@gensokyo.uk>2025-09-08 03:22:10 +0900
commitda2b9c01ceac2d55c271de46d7d18e5b3f19b89b (patch)
tree94cf9dadbe7b49eef36b2b57b799840496b671f1 /system/dispatcher.go
parent323d132c40a74c5ac7a91731a0c43def2a8be7f1 (diff)
system/tmpfiles: do not fail for smaller files
The limit is meant to be an upper bound. Handle EOF and print verbose message for it instead of failing. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'system/dispatcher.go')
-rw-r--r--system/dispatcher.go14
1 files changed, 14 insertions, 0 deletions
diff --git a/system/dispatcher.go b/system/dispatcher.go
index 038231bb..502c8e92 100644
--- a/system/dispatcher.go
+++ b/system/dispatcher.go
@@ -1,12 +1,20 @@
package system
import (
+ "io"
+ "io/fs"
"os"
"hakurei.app/system/acl"
"hakurei.app/system/dbus"
)
+type osFile interface {
+ Name() string
+ io.Writer
+ fs.File
+}
+
// syscallDispatcher provides methods that make state-dependent system calls as part of their behaviour.
// syscallDispatcher is embedded in [I], so all methods must be unexported.
type syscallDispatcher interface {
@@ -15,6 +23,10 @@ type syscallDispatcher interface {
// just synchronising access is not enough, as this is for test instrumentation.
new(f func(k syscallDispatcher))
+ // stat provides os.Stat.
+ stat(name string) (os.FileInfo, error)
+ // open provides [os.Open].
+ open(name string) (osFile, error)
// mkdir provides os.Mkdir.
mkdir(name string, perm os.FileMode) error
// chmod provides os.Chmod.
@@ -48,6 +60,8 @@ type direct struct{}
func (k direct) new(f func(k syscallDispatcher)) { go f(k) }
+func (k direct) stat(name string) (os.FileInfo, error) { return os.Stat(name) }
+func (k direct) open(name string) (osFile, error) { return os.Open(name) }
func (k direct) mkdir(name string, perm os.FileMode) error { return os.Mkdir(name, perm) }
func (k direct) chmod(name string, mode os.FileMode) error { return os.Chmod(name, mode) }
func (k direct) link(oldname, newname string) error { return os.Link(oldname, newname) }