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  }