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