summaryrefslogtreecommitdiff
path: root/vendor/github.com/ncruces/go-sqlite3/vfs/os_std.go
blob: 87ce58b675d5e536af9a51e82da45d2e4d622251 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//go:build !unix || sqlite3_nosys

package vfs

import (
	"io/fs"
	"os"
)

const _O_NOFOLLOW = 0

func osAccess(path string, flags AccessFlag) error {
	fi, err := os.Stat(path)
	if err != nil {
		return err
	}
	if flags == ACCESS_EXISTS {
		return nil
	}

	const (
		S_IREAD  = 0400
		S_IWRITE = 0200
		S_IEXEC  = 0100
	)

	var want fs.FileMode = S_IREAD
	if flags == ACCESS_READWRITE {
		want |= S_IWRITE
	}
	if fi.IsDir() {
		want |= S_IEXEC
	}
	if fi.Mode()&want != want {
		return fs.ErrPermission
	}
	return nil
}

func osSetMode(file *os.File, modeof string) error {
	fi, err := os.Stat(modeof)
	if err != nil {
		return err
	}
	file.Chmod(fi.Mode())
	return nil
}