github.com/dara-project/godist@v0.0.0-20200823115410-e0c80c8f0c78/src/os/stat_unix.go (about) 1 // Copyright 2016 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris 6 7 package os 8 9 import ( 10 "dara" 11 "runtime" 12 "syscall" 13 ) 14 15 // Stat returns the FileInfo structure describing file. 16 // If there is an error, it will be of type *PathError. 17 func (f *File) Stat() (FileInfo, error) { 18 // DARA Instrumentation 19 if runtime.Is_dara_profiling_on() { 20 runtime.Dara_Debug_Print(func() { 21 print("[FSTAT] : ") 22 println(f.file.name) 23 }) 24 argInfo := dara.GeneralType{Type: dara.STRING} 25 copy(argInfo.String[:], f.name) 26 retInfo1 := dara.GeneralType{Type: dara.FILEINFO, Unsupported: dara.UNSUPPORTEDVAL} 27 retInfo2 := dara.GeneralType{Type: dara.ERROR, Unsupported: dara.UNSUPPORTEDVAL} 28 syscallInfo := dara.GeneralSyscall{dara.DSYS_FSTAT, 1, 2, [10]dara.GeneralType{argInfo}, [10]dara.GeneralType{retInfo1, retInfo2}} 29 runtime.Report_Syscall_To_Scheduler(dara.DSYS_FSTAT, syscallInfo) 30 } 31 if f == nil { 32 return nil, ErrInvalid 33 } 34 var fs fileStat 35 err := f.pfd.Fstat(&fs.sys) 36 if err != nil { 37 return nil, &PathError{"stat", f.name, err} 38 } 39 fillFileStatFromSys(&fs, f.name) 40 return &fs, nil 41 } 42 43 // statNolog stats a file with no test logging. 44 func statNolog(name string) (FileInfo, error) { 45 var fs fileStat 46 // DARA Instrumentation 47 if runtime.Is_dara_profiling_on() { 48 runtime.Dara_Debug_Print(func() { println("[STAT] : " + name) }) 49 argInfo := dara.GeneralType{Type: dara.STRING} 50 copy(argInfo.String[:], name) 51 retInfo1 := dara.GeneralType{Type: dara.FILEINFO, Unsupported: dara.UNSUPPORTEDVAL} 52 retInfo2 := dara.GeneralType{Type: dara.ERROR, Unsupported: dara.UNSUPPORTEDVAL} 53 syscallInfo := dara.GeneralSyscall{dara.DSYS_STAT, 1, 2, [10]dara.GeneralType{argInfo}, [10]dara.GeneralType{retInfo1, retInfo2}} 54 runtime.Report_Syscall_To_Scheduler(dara.DSYS_STAT, syscallInfo) 55 } 56 err := syscall.Stat(name, &fs.sys) 57 if err != nil { 58 return nil, &PathError{"stat", name, err} 59 } 60 fillFileStatFromSys(&fs, name) 61 return &fs, nil 62 } 63 64 // lstatNolog lstats a file with no test logging. 65 func lstatNolog(name string) (FileInfo, error) { 66 var fs fileStat 67 // DARA Instrumentation 68 if runtime.Is_dara_profiling_on() { 69 runtime.Dara_Debug_Print(func() { println("[LSTAT] : " + name) }) 70 argInfo := dara.GeneralType{Type: dara.STRING} 71 copy(argInfo.String[:], name) 72 retInfo1 := dara.GeneralType{Type: dara.FILEINFO, Unsupported: dara.UNSUPPORTEDVAL} 73 retInfo2 := dara.GeneralType{Type: dara.ERROR, Unsupported: dara.UNSUPPORTEDVAL} 74 syscallInfo := dara.GeneralSyscall{dara.DSYS_LSTAT, 1, 2, [10]dara.GeneralType{argInfo}, [10]dara.GeneralType{retInfo1, retInfo2}} 75 runtime.Report_Syscall_To_Scheduler(dara.DSYS_LSTAT, syscallInfo) 76 } 77 err := syscall.Lstat(name, &fs.sys) 78 if err != nil { 79 return nil, &PathError{"lstat", name, err} 80 } 81 fillFileStatFromSys(&fs, name) 82 return &fs, nil 83 }