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
20using namespace OHOS::FFI;
21using namespace OHOS::CJSystemapi;
22using namespace OHOS::CJSystemapi::FileFs;
23
24extern "C" {
25int64_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}
35int64_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}
45int64_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}
55int64_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}
65int64_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}
75int64_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}
85int64_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}
95int64_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
106bool 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
117bool 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
128bool 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
139bool 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
150bool 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
161bool 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
172bool 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}