1// Copyright 2016 Keybase Inc. All rights reserved.
2// Use of this source code is governed by a BSD
3// license that can be found in the LICENSE file.
4
5package dokan
6
7import (
8	"context"
9	"fmt"
10	"time"
11
12	"github.com/keybase/client/go/kbfs/dokan/winacl"
13)
14
15type errorFile struct { // nolint
16	fs FileSystem
17}
18
19func (ef *errorFile) print(method string, fi *FileInfo) error {
20	ef.fs.ErrorPrint(fmt.Errorf("INVALID FILE: %s %q", method, fi.Path()))
21	return ErrAccessDenied
22}
23
24func (ef *errorFile) ReadFile(ctx context.Context, fi *FileInfo, bs []byte, offset int64) (int, error) {
25	return 0, ef.print("ReadFile", fi)
26}
27func (ef *errorFile) WriteFile(ctx context.Context, fi *FileInfo, bs []byte, offset int64) (int, error) {
28	return 0, ef.print("WriteFile", fi)
29}
30func (ef *errorFile) FlushFileBuffers(ctx context.Context, fi *FileInfo) error {
31	return ef.print("FlushFileBuffers", fi)
32}
33func (ef *errorFile) GetFileInformation(ctx context.Context, fi *FileInfo) (*Stat, error) {
34	return nil, ef.print("GetFileInformation", fi)
35}
36func (ef *errorFile) FindFiles(ctx context.Context, fi *FileInfo, pattern string, fillStatCallback func(*NamedStat) error) error {
37	return ef.print("FindFiles", fi)
38}
39func (ef *errorFile) SetFileTime(ctx context.Context, fi *FileInfo, creation time.Time, lastAccess time.Time, lastWrite time.Time) error {
40	return ef.print("SetFileTime", fi)
41}
42func (ef *errorFile) SetFileAttributes(ctx context.Context, fi *FileInfo, fileAttributes FileAttribute) error {
43	return ef.print("SetFileAttributes", fi)
44}
45func (ef *errorFile) SetEndOfFile(ctx context.Context, fi *FileInfo, length int64) error {
46	return ef.print("SetEndOfFile", fi)
47}
48func (ef *errorFile) SetAllocationSize(ctx context.Context, fi *FileInfo, length int64) error {
49	return ef.print("SetAllocationSize", fi)
50}
51func (ef *errorFile) LockFile(ctx context.Context, fi *FileInfo, offset int64, length int64) error {
52	return ef.print("LockFile", fi)
53}
54func (ef *errorFile) UnlockFile(ctx context.Context, fi *FileInfo, offset int64, length int64) error {
55	return ef.print("UnlockFile", fi)
56}
57func (ef *errorFile) GetFileSecurity(ctx context.Context, fi *FileInfo, si winacl.SecurityInformation, sd *winacl.SecurityDescriptor) error {
58	return ef.print("GetFileSecurity", fi)
59}
60func (ef *errorFile) SetFileSecurity(ctx context.Context, fi *FileInfo, si winacl.SecurityInformation, sd *winacl.SecurityDescriptor) error {
61	return ef.print("SetFileSecurity", fi)
62}
63func (ef *errorFile) CanDeleteFile(ctx context.Context, fi *FileInfo) error {
64	return ef.print("CanDeleteFile", fi)
65}
66func (ef *errorFile) CanDeleteDirectory(ctx context.Context, fi *FileInfo) error {
67	return ef.print("CanDeleteDirectory", fi)
68}
69func (ef *errorFile) Cleanup(ctx context.Context, fi *FileInfo) {
70	ef.print("Cleanup", fi)
71}
72func (ef *errorFile) CloseFile(ctx context.Context, fi *FileInfo) {
73	ef.print("CloseFile", fi)
74}
75