From ade8094005cb3ace94d71fbaec291089397516f8 Mon Sep 17 00:00:00 2001 From: Dominik Menke Date: Mon, 18 Apr 2022 12:41:56 +0200 Subject: [PATCH] mem: add rudimentary FileInfo.Sys() implementation This allows downstream users to act on file ownership. Signed-off-by: Dominik Menke --- mem/file.go | 8 +++++++- mem/file_unix.go | 32 ++++++++++++++++++++++++++++++++ mem/file_windows.go | 20 ++++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 mem/file_unix.go create mode 100644 mem/file_windows.go diff --git a/mem/file.go b/mem/file.go index 62fe449..8c69a59 100644 --- a/mem/file.go +++ b/mem/file.go @@ -339,7 +339,7 @@ func (s *FileInfo) IsDir() bool { defer s.Unlock() return s.dir } -func (s *FileInfo) Sys() interface{} { return nil } + func (s *FileInfo) Size() int64 { if s.IsDir() { return int64(42) @@ -349,6 +349,12 @@ func (s *FileInfo) Size() int64 { return int64(len(s.data)) } +func (s *FileInfo) Sys() interface{} { + s.Lock() + defer s.Unlock() + return sysFromFileInfo(s) +} + var ( ErrFileClosed = errors.New("File is closed") ErrOutOfRange = errors.New("out of range") diff --git a/mem/file_unix.go b/mem/file_unix.go new file mode 100644 index 0000000..3c92bc6 --- /dev/null +++ b/mem/file_unix.go @@ -0,0 +1,32 @@ +// Copyright © 2015 Steve Francia . +// Copyright 2013 tsuru authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build !windows +// +build !windows + +package mem + +import "syscall" + +func sysFromFileInfo(s *FileInfo) interface{} { + sys := &syscall.Stat_t{ + Uid: uint32(s.uid), + Gid: uint32(s.gid), + Size: 42, + } + if !s.dir { + sys.Size = int64(len(s.data)) + } + return sys +} diff --git a/mem/file_windows.go b/mem/file_windows.go new file mode 100644 index 0000000..42faaae --- /dev/null +++ b/mem/file_windows.go @@ -0,0 +1,20 @@ +// Copyright © 2015 Steve Francia . +// Copyright 2013 tsuru authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build windows +// +build windows + +package mem + +func sysFromFileInfo(s *FileInfo) interface{} { return nil }