|  | // Copyright 2012 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | // +build aix darwin dragonfly freebsd hurd openbsd netbsd solaris | 
|  |  | 
|  | // General POSIX version of UtimesNano. | 
|  |  | 
|  | package syscall | 
|  |  | 
|  | import "unsafe" | 
|  |  | 
|  | func UtimesNano(path string, ts []Timespec) error { | 
|  | // TODO: The BSDs can do utimensat with SYS_UTIMENSAT but it | 
|  | // isn't supported by darwin so this uses utimes instead | 
|  | if len(ts) != 2 { | 
|  | return EINVAL | 
|  | } | 
|  | // Not as efficient as it could be because Timespec and | 
|  | // Timeval have different types in the different OSes | 
|  | tv := [2]Timeval{ | 
|  | NsecToTimeval(TimespecToNsec(ts[0])), | 
|  | NsecToTimeval(TimespecToNsec(ts[1])), | 
|  | } | 
|  | return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) | 
|  | } |