mem: add rudimentary FileInfo.Sys() implementation

This allows downstream users to act on file ownership.

Signed-off-by: Dominik Menke <dom@digineo.de>
This commit is contained in:
Dominik Menke 2022-04-18 12:41:56 +02:00
parent 5c4385aa20
commit ade8094005
3 changed files with 59 additions and 1 deletions

View File

@ -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")

32
mem/file_unix.go Normal file
View File

@ -0,0 +1,32 @@
// Copyright © 2015 Steve Francia <spf@spf13.com>.
// 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
}

20
mem/file_windows.go Normal file
View File

@ -0,0 +1,20 @@
// Copyright © 2015 Steve Francia <spf@spf13.com>.
// 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 }