1 /*
2 * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "file_operations_base.h"
16 #include "cloud_disk_inode.h"
17 #include "file_operations_helper.h"
18
19 #include <cerrno>
20
21 #include "utils_log.h"
22
23 namespace OHOS {
24 namespace FileManagement {
25 namespace CloudDisk {
26 using namespace std;
Lookup(fuse_req_t req,fuse_ino_t parent,const char * name)27 void FileOperationsBase::Lookup(fuse_req_t req, fuse_ino_t parent, const char *name)
28 {
29 LOGE("Lookup operation is not supported!");
30 fuse_reply_err(req, ENOSYS);
31 }
32
Access(fuse_req_t req,fuse_ino_t ino,int mask)33 void FileOperationsBase::Access(fuse_req_t req, fuse_ino_t ino, int mask)
34 {
35 LOGE("Access operation is not supported!");
36 fuse_reply_err(req, ENOSYS);
37 }
38
GetAttr(fuse_req_t req,fuse_ino_t ino,struct fuse_file_info * fi)39 void FileOperationsBase::GetAttr(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
40 {
41 LOGE("GetAttr operation is not supported!");
42 fuse_reply_err(req, ENOSYS);
43 }
44
Open(fuse_req_t req,fuse_ino_t ino,struct fuse_file_info * fi)45 void FileOperationsBase::Open(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
46 {
47 LOGE("Open operation is not supported!");
48 fuse_reply_err(req, ENOSYS);
49 }
50
Forget(fuse_req_t req,fuse_ino_t ino,uint64_t nLookup)51 void FileOperationsBase::Forget(fuse_req_t req, fuse_ino_t ino, uint64_t nLookup)
52 {
53 auto data = reinterpret_cast<struct CloudDiskFuseData *>(fuse_req_userdata(req));
54 auto node = FileOperationsHelper::FindCloudDiskInode(data, static_cast<int64_t>(ino));
55 if (node == nullptr) {
56 LOGE("Forget an invalid inode");
57 return (void) fuse_reply_none(req);
58 }
59 string localIdKey = std::to_string(node->parent) + node->fileName;
60 int64_t key = static_cast<int64_t>(ino);
61 FileOperationsHelper::PutCloudDiskInode(data, node, nLookup, key);
62 FileOperationsHelper::PutLocalId(data, node, nLookup, localIdKey);
63 fuse_reply_none(req);
64 }
65
ForgetMulti(fuse_req_t req,size_t count,struct fuse_forget_data * forgets)66 void FileOperationsBase::ForgetMulti(fuse_req_t req, size_t count, struct fuse_forget_data *forgets)
67 {
68 auto data = reinterpret_cast<struct CloudDiskFuseData *>(fuse_req_userdata(req));
69 for (size_t i = 0; i < count; i++) {
70 auto inoPtr = FileOperationsHelper::FindCloudDiskInode(data, static_cast<int64_t>(forgets[i].ino));
71 if (inoPtr == nullptr) {
72 LOGE("ForgetMulti got an invalid inode");
73 continue;
74 }
75 string localIdKey = std::to_string(inoPtr->parent) + inoPtr->fileName;
76 FileOperationsHelper::PutCloudDiskInode(data, inoPtr, forgets[i].nlookup, forgets[i].ino);
77 FileOperationsHelper::PutLocalId(data, inoPtr, forgets[i].nlookup, localIdKey);
78 }
79 fuse_reply_none(req);
80 }
81
MkNod(fuse_req_t req,fuse_ino_t parent,const char * name,mode_t mode,dev_t rdev)82 void FileOperationsBase::MkNod(fuse_req_t req, fuse_ino_t parent, const char *name,
83 mode_t mode, dev_t rdev)
84 {
85 LOGE("MkNod operation is not supported!");
86 fuse_reply_err(req, ENOSYS);
87 }
88
Create(fuse_req_t req,fuse_ino_t parent,const char * name,mode_t mode,struct fuse_file_info * fi)89 void FileOperationsBase::Create(fuse_req_t req, fuse_ino_t parent, const char *name,
90 mode_t mode, struct fuse_file_info *fi)
91 {
92 LOGE("Create operation is not supported!");
93 fuse_reply_err(req, ENOSYS);
94 }
95
ReadDir(fuse_req_t req,fuse_ino_t ino,size_t size,off_t off,struct fuse_file_info * fi)96 void FileOperationsBase::ReadDir(fuse_req_t req, fuse_ino_t ino, size_t size, off_t off,
97 struct fuse_file_info *fi)
98 {
99 LOGE("ReadDir operation is not supported!");
100 fuse_reply_err(req, ENOSYS);
101 }
102
SetXattr(fuse_req_t req,fuse_ino_t ino,const char * name,const char * value,size_t size,int flags)103 void FileOperationsBase::SetXattr(fuse_req_t req, fuse_ino_t ino, const char *name,
104 const char *value, size_t size, int flags)
105 {
106 LOGE("SetXattr operation is not supported!");
107 fuse_reply_err(req, EINVAL);
108 }
109
GetXattr(fuse_req_t req,fuse_ino_t ino,const char * name,size_t size)110 void FileOperationsBase::GetXattr(fuse_req_t req, fuse_ino_t ino, const char *name,
111 size_t size)
112 {
113 LOGE("GetXattr operation is not supported!");
114 fuse_reply_err(req, EINVAL);
115 }
116
MkDir(fuse_req_t req,fuse_ino_t parent,const char * name,mode_t mode)117 void FileOperationsBase::MkDir(fuse_req_t req, fuse_ino_t parent, const char *name, mode_t mode)
118 {
119 LOGE("MkDir operation is not supported!");
120 fuse_reply_err(req, ENOSYS);
121 }
122
RmDir(fuse_req_t req,fuse_ino_t parent,const char * name)123 void FileOperationsBase::RmDir(fuse_req_t req, fuse_ino_t parent, const char *name)
124 {
125 LOGE("RmDir operation is not supported!");
126 fuse_reply_err(req, ENOSYS);
127 }
128
Unlink(fuse_req_t req,fuse_ino_t parent,const char * name)129 void FileOperationsBase::Unlink(fuse_req_t req, fuse_ino_t parent, const char *name)
130 {
131 LOGE("Unlink operation is not supported!");
132 fuse_reply_err(req, ENOSYS);
133 }
134
Rename(fuse_req_t req,fuse_ino_t parent,const char * name,fuse_ino_t newParent,const char * newName,unsigned int flags)135 void FileOperationsBase::Rename(fuse_req_t req, fuse_ino_t parent, const char *name,
136 fuse_ino_t newParent, const char *newName, unsigned int flags)
137 {
138 LOGE("Rename operation is not supported!");
139 fuse_reply_err(req, ENOSYS);
140 }
141
Read(fuse_req_t req,fuse_ino_t ino,size_t size,off_t offset,struct fuse_file_info * fi)142 void FileOperationsBase::Read(fuse_req_t req, fuse_ino_t ino, size_t size,
143 off_t offset, struct fuse_file_info *fi)
144 {
145 LOGE("Read operation is not supported!");
146 fuse_reply_err(req, ENOSYS);
147 }
148
WriteBuf(fuse_req_t req,fuse_ino_t ino,struct fuse_bufvec * bufv,off_t off,struct fuse_file_info * fi)149 void FileOperationsBase::WriteBuf(fuse_req_t req, fuse_ino_t ino, struct fuse_bufvec *bufv,
150 off_t off, struct fuse_file_info *fi)
151 {
152 LOGE("WriteBuf operation is not supported!");
153 fuse_reply_err(req, ENOSYS);
154 }
155
Release(fuse_req_t req,fuse_ino_t ino,struct fuse_file_info * fi)156 void FileOperationsBase::Release(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
157 {
158 LOGE("Release operation is not supported!");
159 fuse_reply_err(req, ENOSYS);
160 }
SetAttr(fuse_req_t req,fuse_ino_t ino,struct stat * attr,int valid,struct fuse_file_info * fi)161 void FileOperationsBase::SetAttr(fuse_req_t req, fuse_ino_t ino, struct stat *attr, int valid,
162 struct fuse_file_info *fi)
163 {
164 LOGE("SetAttr operation is not supported!");
165 fuse_reply_err(req, EINVAL);
166 }
Lseek(fuse_req_t req,fuse_ino_t ino,off_t off,int whence,struct fuse_file_info * fi)167 void FileOperationsBase::Lseek(fuse_req_t req, fuse_ino_t ino, off_t off, int whence,
168 struct fuse_file_info *fi)
169 {
170 LOGE("Lseek operation is not supported!");
171 fuse_reply_err(req, ENOSYS);
172 }
173 } // namespace CloudDisk
174 } // namespace FileManagement
175 } // namespace OHOS
176