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//go:build unix || (js && wasm) || wasip1 6 7package os 8 9import ( 10 "syscall" 11) 12 13// Stat returns the [FileInfo] structure describing file. 14// If there is an error, it will be of type [*PathError]. 15func (f *File) Stat() (FileInfo, error) { 16 if f == nil { 17 return nil, ErrInvalid 18 } 19 var fs fileStat 20 err := f.pfd.Fstat(&fs.sys) 21 if err != nil { 22 return nil, f.wrapErr("stat", err) 23 } 24 fillFileStatFromSys(&fs, f.name) 25 return &fs, nil 26} 27 28// statNolog stats a file with no test logging. 29func statNolog(name string) (FileInfo, error) { 30 var fs fileStat 31 err := ignoringEINTR(func() error { 32 return syscall.Stat(name, &fs.sys) 33 }) 34 if err != nil { 35 return nil, &PathError{Op: "stat", Path: name, Err: err} 36 } 37 fillFileStatFromSys(&fs, name) 38 return &fs, nil 39} 40 41// lstatNolog lstats a file with no test logging. 42func lstatNolog(name string) (FileInfo, error) { 43 var fs fileStat 44 err := ignoringEINTR(func() error { 45 return syscall.Lstat(name, &fs.sys) 46 }) 47 if err != nil { 48 return nil, &PathError{Op: "lstat", Path: name, Err: err} 49 } 50 fillFileStatFromSys(&fs, name) 51 return &fs, nil 52} 53