github.com/stackdocker/rkt@v0.10.1-0.20151109095037-1aa827478248/pkg/fileutil/utimes_linux.go (about) 1 // Copyright 2015 The rkt 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 // These functions are from github.com/docker/docker/pkg/system 16 17 // TODO(sgotti) waiting for a utimensat functions accepting flags and a 18 // LUtimesNano using it in https://github.com/golang/sys/ 19 20 package fileutil 21 22 import ( 23 "syscall" 24 "unsafe" 25 ) 26 27 func LUtimesNano(path string, ts []syscall.Timespec) error { 28 // These are not currently available in syscall 29 AT_FDCWD := -100 30 AT_SYMLINK_NOFOLLOW := 0x100 31 32 var _path *byte 33 _path, err := syscall.BytePtrFromString(path) 34 if err != nil { 35 return err 36 } 37 38 if _, _, err := syscall.Syscall6(syscall.SYS_UTIMENSAT, uintptr(AT_FDCWD), uintptr(unsafe.Pointer(_path)), uintptr(unsafe.Pointer(&ts[0])), uintptr(AT_SYMLINK_NOFOLLOW), 0, 0); err != 0 && err != syscall.ENOSYS { 39 return err 40 } 41 42 return nil 43 }