github.com/metacubex/gvisor@v0.0.0-20240320004321-933faba989ec/pkg/sentry/fsimpl/host/util.go (about) 1 // Copyright 2020 The gVisor Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package host 16 17 import ( 18 "golang.org/x/sys/unix" 19 "github.com/metacubex/gvisor/pkg/abi/linux" 20 "github.com/metacubex/gvisor/pkg/errors/linuxerr" 21 ) 22 23 func toTimespec(ts linux.StatxTimestamp, omit bool) unix.Timespec { 24 if omit { 25 return unix.Timespec{ 26 Sec: 0, 27 Nsec: unix.UTIME_OMIT, 28 } 29 } 30 return unix.Timespec{ 31 Sec: ts.Sec, 32 Nsec: int64(ts.Nsec), 33 } 34 } 35 36 func unixToLinuxStatxTimestamp(ts unix.StatxTimestamp) linux.StatxTimestamp { 37 return linux.StatxTimestamp{Sec: ts.Sec, Nsec: ts.Nsec} 38 } 39 40 func timespecToStatxTimestamp(ts unix.Timespec) linux.StatxTimestamp { 41 return linux.StatxTimestamp{Sec: int64(ts.Sec), Nsec: uint32(ts.Nsec)} 42 } 43 44 // isBlockError checks if an error is EAGAIN or EWOULDBLOCK. 45 // If so, they can be transformed into linuxerr.ErrWouldBlock. 46 func isBlockError(err error) bool { 47 return linuxerr.Equals(linuxerr.EAGAIN, err) || linuxerr.Equals(linuxerr.EWOULDBLOCK, err) 48 }