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