1 /*
2  * Copyright (c) 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 
16 #include "stat_ffi.h"
17 #include "stat_impl.h"
18 #include "macro.h"
19 
20 using namespace OHOS::FFI;
21 using namespace OHOS::CJSystemapi;
22 using namespace OHOS::CJSystemapi::FileFs;
23 
24 extern "C" {
FfiOHOSStatGetIno(int64_t id)25 int64_t FfiOHOSStatGetIno(int64_t id)
26 {
27     LOGI("FS_TEST:: FfiOHOSStatGetIno");
28     auto instance = FFIData::GetData<StatImpl>(id);
29     if (!instance) {
30         LOGE("StatImpl instance not exist %{public}" PRId64, id);
31         return ERR_INVALID_INSTANCE_CODE;
32     }
33     return instance->GetIno();
34 }
FfiOHOSStatGetMode(int64_t id)35 int64_t FfiOHOSStatGetMode(int64_t id)
36 {
37     LOGI("FS_TEST:: FfiOHOSStatGetMode");
38     auto instance = FFIData::GetData<StatImpl>(id);
39     if (!instance) {
40         LOGE("StatImpl instance not exist %{public}" PRId64, id);
41         return ERR_INVALID_INSTANCE_CODE;
42     }
43     return instance->GetMode();
44 }
FfiOHOSStatGetUid(int64_t id)45 int64_t FfiOHOSStatGetUid(int64_t id)
46 {
47     LOGI("FS_TEST:: FfiOHOSStatGetUid");
48     auto instance = FFIData::GetData<StatImpl>(id);
49     if (!instance) {
50         LOGE("StatImpl instance not exist %{public}" PRId64, id);
51         return ERR_INVALID_INSTANCE_CODE;
52     }
53     return instance->GetUid();
54 }
FfiOHOSStatGetGid(int64_t id)55 int64_t FfiOHOSStatGetGid(int64_t id)
56 {
57     LOGI("FS_TEST:: FfiOHOSStatGetGid");
58     auto instance = FFIData::GetData<StatImpl>(id);
59     if (!instance) {
60         LOGE("StatImpl instance not exist %{public}" PRId64, id);
61         return ERR_INVALID_INSTANCE_CODE;
62     }
63     return instance->GetGid();
64 }
FfiOHOSStatGetSize(int64_t id)65 int64_t FfiOHOSStatGetSize(int64_t id)
66 {
67     LOGI("FS_TEST:: FfiOHOSStatGetSize");
68     auto instance = FFIData::GetData<StatImpl>(id);
69     if (!instance) {
70         LOGE("StatImpl instance not exist %{public}" PRId64, id);
71         return ERR_INVALID_INSTANCE_CODE;
72     }
73     return instance->GetSize();
74 }
FfiOHOSStatGetAtime(int64_t id)75 int64_t FfiOHOSStatGetAtime(int64_t id)
76 {
77     LOGI("FS_TEST:: FfiOHOSStatGetAtime");
78     auto instance = FFIData::GetData<StatImpl>(id);
79     if (!instance) {
80         LOGE("StatImpl instance not exist %{public}" PRId64, id);
81         return ERR_INVALID_INSTANCE_CODE;
82     }
83     return instance->GetAtime();
84 }
FfiOHOSStatGetMtime(int64_t id)85 int64_t FfiOHOSStatGetMtime(int64_t id)
86 {
87     LOGI("FS_TEST:: FfiOHOSStatGetMtime");
88     auto instance = FFIData::GetData<StatImpl>(id);
89     if (!instance) {
90         LOGE("StatImpl instance not exist %{public}" PRId64, id);
91         return ERR_INVALID_INSTANCE_CODE;
92     }
93     return instance->GetMtime();
94 }
FfiOHOSStatGetCtime(int64_t id)95 int64_t FfiOHOSStatGetCtime(int64_t id)
96 {
97     LOGI("FS_TEST:: FfiOHOSStatGetCtime");
98     auto instance = FFIData::GetData<StatImpl>(id);
99     if (!instance) {
100         LOGE("StatImpl instance not exist %{public}" PRId64, id);
101         return ERR_INVALID_INSTANCE_CODE;
102     }
103     return instance->GetCtime();
104 }
105 
FfiOHOSStatIsBlockDevice(int64_t id)106 bool FfiOHOSStatIsBlockDevice(int64_t id)
107 {
108     LOGI("FS_TEST:: FfiOHOSStatIsBlockDevice");
109     auto instance = FFIData::GetData<StatImpl>(id);
110     if (!instance) {
111         LOGE("StatImpl instance not exist %{public}" PRId64, id);
112         return ERR_INVALID_INSTANCE_CODE;
113     }
114     return instance->IsBlockDevice();
115 }
116 
FfiOHOSStatIsCharacterDevice(int64_t id)117 bool FfiOHOSStatIsCharacterDevice(int64_t id)
118 {
119     LOGI("FS_TEST:: FfiOHOSStatIsCharacterDevice");
120     auto instance = FFIData::GetData<StatImpl>(id);
121     if (!instance) {
122         LOGE("StatImpl instance not exist %{public}" PRId64, id);
123         return ERR_INVALID_INSTANCE_CODE;
124     }
125     return instance->IsCharacterDevice();
126 }
127 
FfiOHOSStatIsDirectory(int64_t id)128 bool FfiOHOSStatIsDirectory(int64_t id)
129 {
130     LOGI("FS_TEST:: FfiOHOSStatIsDirectory");
131     auto instance = FFIData::GetData<StatImpl>(id);
132     if (!instance) {
133         LOGE("StatImpl instance not exist %{public}" PRId64, id);
134         return ERR_INVALID_INSTANCE_CODE;
135     }
136     return instance->IsDirectory();
137 }
138 
FfiOHOSStatIsFIFO(int64_t id)139 bool FfiOHOSStatIsFIFO(int64_t id)
140 {
141     LOGI("FS_TEST:: FfiOHOSStatIsFIFO");
142     auto instance = FFIData::GetData<StatImpl>(id);
143     if (!instance) {
144         LOGE("StatImpl instance not exist %{public}" PRId64, id);
145         return ERR_INVALID_INSTANCE_CODE;
146     }
147     return instance->IsFIFO();
148 }
149 
FfiOHOSStatIsFile(int64_t id)150 bool FfiOHOSStatIsFile(int64_t id)
151 {
152     LOGI("FS_TEST:: FfiOHOSStatIsFile");
153     auto instance = FFIData::GetData<StatImpl>(id);
154     if (!instance) {
155         LOGE("StatImpl instance not exist %{public}" PRId64, id);
156         return ERR_INVALID_INSTANCE_CODE;
157     }
158     return instance->IsFile();
159 }
160 
FfiOHOSStatIsSocket(int64_t id)161 bool FfiOHOSStatIsSocket(int64_t id)
162 {
163     LOGI("FS_TEST:: FfiOHOSStatIsSocket");
164     auto instance = FFIData::GetData<StatImpl>(id);
165     if (!instance) {
166         LOGE("StatImpl instance not exist %{public}" PRId64, id);
167         return ERR_INVALID_INSTANCE_CODE;
168     }
169     return instance->IsSocket();
170 }
171 
FfiOHOSStatIsSymbolicLink(int64_t id)172 bool FfiOHOSStatIsSymbolicLink(int64_t id)
173 {
174     LOGI("FS_TEST:: FfiOHOSStatIsSymbolicLink");
175     auto instance = FFIData::GetData<StatImpl>(id);
176     if (!instance) {
177         LOGE("StatImpl instance not exist %{public}" PRId64, id);
178         return ERR_INVALID_INSTANCE_CODE;
179     }
180     return instance->IsSymbolicLink();
181 }
182 }