• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "cloud_file_fault_event.h"
22 #include "utils_log.h"
23 
24 namespace OHOS {
25 namespace FileManagement {
26 namespace CloudDisk {
27 using namespace std;
28 using namespace OHOS::FileManagement::CloudFile;
Lookup(fuse_req_t req,fuse_ino_t parent,const char * name)29 void FileOperationsBase::Lookup(fuse_req_t req, fuse_ino_t parent, const char *name)
30 {
31     LOGE("Lookup operation is not supported!");
32     fuse_reply_err(req, ENOSYS);
33 }
34 
Access(fuse_req_t req,fuse_ino_t ino,int mask)35 void FileOperationsBase::Access(fuse_req_t req, fuse_ino_t ino, int mask)
36 {
37     LOGE("Access operation is not supported!");
38     fuse_reply_err(req, ENOSYS);
39 }
40 
GetAttr(fuse_req_t req,fuse_ino_t ino,struct fuse_file_info * fi)41 void FileOperationsBase::GetAttr(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
42 {
43     LOGE("GetAttr operation is not supported!");
44     fuse_reply_err(req, ENOSYS);
45 }
46 
Open(fuse_req_t req,fuse_ino_t ino,struct fuse_file_info * fi)47 void FileOperationsBase::Open(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
48 {
49     LOGE("Open operation is not supported!");
50     fuse_reply_err(req, ENOSYS);
51 }
52 
Forget(fuse_req_t req,fuse_ino_t ino,uint64_t nLookup)53 void FileOperationsBase::Forget(fuse_req_t req, fuse_ino_t ino, uint64_t nLookup)
54 {
55     auto data = reinterpret_cast<struct CloudDiskFuseData *>(fuse_req_userdata(req));
56     auto node = FileOperationsHelper::FindCloudDiskInode(data, static_cast<int64_t>(ino));
57     if (node == nullptr) {
58         CLOUD_FILE_FAULT_REPORT(CloudFile::CloudFileFaultInfo{"", CloudFile::FaultOperation::FORGET,
59             CloudFile::FaultType::WARNING, EINVAL, "Forget an invalid inode"});
60         return (void) fuse_reply_none(req);
61     }
62     string localIdKey = std::to_string(node->parent) + node->fileName;
63     int64_t key = static_cast<int64_t>(ino);
64     FileOperationsHelper::PutCloudDiskInode(data, node, nLookup, key);
65     FileOperationsHelper::PutLocalId(data, node, nLookup, localIdKey);
66     fuse_reply_none(req);
67 }
68 
ForgetMulti(fuse_req_t req,size_t count,struct fuse_forget_data * forgets)69 void FileOperationsBase::ForgetMulti(fuse_req_t req, size_t count, struct fuse_forget_data *forgets)
70 {
71     auto data = reinterpret_cast<struct CloudDiskFuseData *>(fuse_req_userdata(req));
72     for (size_t i = 0; i < count; i++) {
73         auto inoPtr = FileOperationsHelper::FindCloudDiskInode(data, static_cast<int64_t>(forgets[i].ino));
74         if (inoPtr == nullptr) {
75             CLOUD_FILE_FAULT_REPORT(CloudFile::CloudFileFaultInfo{"", CloudFile::FaultOperation::FORGETMULTI,
76                 CloudFile::FaultType::WARNING, EINVAL, "ForgetMulti got an invalid inode"});
77             continue;
78         }
79         string localIdKey = std::to_string(inoPtr->parent) + inoPtr->fileName;
80         FileOperationsHelper::PutCloudDiskInode(data, inoPtr, forgets[i].nlookup, forgets[i].ino);
81         FileOperationsHelper::PutLocalId(data, inoPtr, forgets[i].nlookup, localIdKey);
82     }
83     fuse_reply_none(req);
84 }
85 
MkNod(fuse_req_t req,fuse_ino_t parent,const char * name,mode_t mode,dev_t rdev)86 void FileOperationsBase::MkNod(fuse_req_t req, fuse_ino_t parent, const char *name,
87                                mode_t mode, dev_t rdev)
88 {
89     LOGE("MkNod operation is not supported!");
90     fuse_reply_err(req, ENOSYS);
91 }
92 
Create(fuse_req_t req,fuse_ino_t parent,const char * name,mode_t mode,struct fuse_file_info * fi)93 void FileOperationsBase::Create(fuse_req_t req, fuse_ino_t parent, const char *name,
94                                 mode_t mode, struct fuse_file_info *fi)
95 {
96     LOGE("Create operation is not supported!");
97     fuse_reply_err(req, ENOSYS);
98 }
99 
ReadDir(fuse_req_t req,fuse_ino_t ino,size_t size,off_t off,struct fuse_file_info * fi)100 void FileOperationsBase::ReadDir(fuse_req_t req, fuse_ino_t ino, size_t size, off_t off,
101                                  struct fuse_file_info *fi)
102 {
103     LOGE("ReadDir operation is not supported!");
104     fuse_reply_err(req, ENOSYS);
105 }
106 
SetXattr(fuse_req_t req,fuse_ino_t ino,const char * name,const char * value,size_t size,int flags)107 void FileOperationsBase::SetXattr(fuse_req_t req, fuse_ino_t ino, const char *name,
108                                   const char *value, size_t size, int flags)
109 {
110     LOGE("SetXattr operation is not supported!");
111     fuse_reply_err(req, EINVAL);
112 }
113 
GetXattr(fuse_req_t req,fuse_ino_t ino,const char * name,size_t size)114 void FileOperationsBase::GetXattr(fuse_req_t req, fuse_ino_t ino, const char *name,
115                                   size_t size)
116 {
117     LOGE("GetXattr operation is not supported!");
118     fuse_reply_err(req, EINVAL);
119 }
120 
MkDir(fuse_req_t req,fuse_ino_t parent,const char * name,mode_t mode)121 void FileOperationsBase::MkDir(fuse_req_t req, fuse_ino_t parent, const char *name, mode_t mode)
122 {
123     LOGE("MkDir operation is not supported!");
124     fuse_reply_err(req, ENOSYS);
125 }
126 
RmDir(fuse_req_t req,fuse_ino_t parent,const char * name)127 void FileOperationsBase::RmDir(fuse_req_t req, fuse_ino_t parent, const char *name)
128 {
129     LOGE("RmDir operation is not supported!");
130     fuse_reply_err(req, ENOSYS);
131 }
132 
Unlink(fuse_req_t req,fuse_ino_t parent,const char * name)133 void FileOperationsBase::Unlink(fuse_req_t req, fuse_ino_t parent, const char *name)
134 {
135     LOGE("Unlink operation is not supported!");
136     fuse_reply_err(req, ENOSYS);
137 }
138 
Rename(fuse_req_t req,fuse_ino_t parent,const char * name,fuse_ino_t newParent,const char * newName,unsigned int flags)139 void FileOperationsBase::Rename(fuse_req_t req, fuse_ino_t parent, const char *name,
140                                 fuse_ino_t newParent, const char *newName, unsigned int flags)
141 {
142     LOGE("Rename operation is not supported!");
143     fuse_reply_err(req, ENOSYS);
144 }
145 
Read(fuse_req_t req,fuse_ino_t ino,size_t size,off_t offset,struct fuse_file_info * fi)146 void FileOperationsBase::Read(fuse_req_t req, fuse_ino_t ino, size_t size,
147                               off_t offset, struct fuse_file_info *fi)
148 {
149     LOGE("Read operation is not supported!");
150     fuse_reply_err(req, ENOSYS);
151 }
152 
WriteBuf(fuse_req_t req,fuse_ino_t ino,struct fuse_bufvec * bufv,off_t off,struct fuse_file_info * fi)153 void FileOperationsBase::WriteBuf(fuse_req_t req, fuse_ino_t ino, struct fuse_bufvec *bufv,
154                                   off_t off, struct fuse_file_info *fi)
155 {
156     LOGE("WriteBuf operation is not supported!");
157     fuse_reply_err(req, ENOSYS);
158 }
159 
Release(fuse_req_t req,fuse_ino_t ino,struct fuse_file_info * fi)160 void FileOperationsBase::Release(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
161 {
162     LOGE("Release operation is not supported!");
163     fuse_reply_err(req, ENOSYS);
164 }
SetAttr(fuse_req_t req,fuse_ino_t ino,struct stat * attr,int valid,struct fuse_file_info * fi)165 void FileOperationsBase::SetAttr(fuse_req_t req, fuse_ino_t ino, struct stat *attr, int valid,
166                                  struct fuse_file_info *fi)
167 {
168     LOGE("SetAttr operation is not supported!");
169     fuse_reply_err(req, EINVAL);
170 }
Lseek(fuse_req_t req,fuse_ino_t ino,off_t off,int whence,struct fuse_file_info * fi)171 void FileOperationsBase::Lseek(fuse_req_t req, fuse_ino_t ino, off_t off, int whence,
172                                struct fuse_file_info *fi)
173 {
174     LOGE("Lseek operation is not supported!");
175     fuse_reply_err(req, ENOSYS);
176 }
Ioctl(fuse_req_t req,fuse_ino_t ino,int cmd,void * arg,struct fuse_file_info * fi,unsigned flags,const void * inBuf,size_t inBufsz,size_t outBufsz)177 void FileOperationsBase::Ioctl(fuse_req_t req, fuse_ino_t ino, int cmd, void *arg, struct fuse_file_info *fi,
178                                unsigned flags, const void *inBuf, size_t inBufsz, size_t outBufsz)
179 {
180     LOGE("Ioctl operation is not supported!");
181     fuse_reply_err(req, ENOSYS);
182 }
183 } // namespace CloudDisk
184 } // namespace FileManagement
185 } // namespace OHOS
186