Skip to content

Commit b80f086

Browse files
committed
darwin: use utimensat syscall instead of utimes
This fix is similar to what FreeBSD support does (bb87682), but prepares a separate file to handle the darwin case. Signed-off-by: Hajime Tazaki <[email protected]>
1 parent c666a35 commit b80f086

2 files changed

Lines changed: 43 additions & 1 deletion

File tree

fs/copy_darwin.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// +build darwin
2+
3+
/*
4+
Copyright The containerd Authors.
5+
6+
Licensed under the Apache License, Version 2.0 (the "License");
7+
you may not use this file except in compliance with the License.
8+
You may obtain a copy of the License at
9+
10+
http://www.apache.org/licenses/LICENSE-2.0
11+
12+
Unless required by applicable law or agreed to in writing, software
13+
distributed under the License is distributed on an "AS IS" BASIS,
14+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
See the License for the specific language governing permissions and
16+
limitations under the License.
17+
*/
18+
19+
package fs
20+
21+
import (
22+
"os"
23+
"syscall"
24+
25+
"github.com/pkg/errors"
26+
"golang.org/x/sys/unix"
27+
)
28+
29+
func copyDevice(dst string, fi os.FileInfo) error {
30+
st, ok := fi.Sys().(*syscall.Stat_t)
31+
if !ok {
32+
return errors.New("unsupported stat type")
33+
}
34+
return unix.Mknod(dst, uint32(fi.Mode()), int(st.Rdev))
35+
}
36+
37+
func utimesNano(name string, atime, mtime syscall.Timespec) error {
38+
at := unix.NsecToTimespec(atime.Nano())
39+
mt := unix.NsecToTimespec(mtime.Nano())
40+
utimes := [2]unix.Timespec{at, mt}
41+
return unix.UtimesNanoAt(unix.AT_FDCWD, name, utimes[0:], unix.AT_SYMLINK_NOFOLLOW)
42+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// +build darwin openbsd solaris
1+
// +build openbsd solaris
22

33
/*
44
Copyright The containerd Authors.

0 commit comments

Comments
 (0)