15bebb993Sopenharmony_ci/*
25bebb993Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
35bebb993Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
45bebb993Sopenharmony_ci * you may not use this file except in compliance with the License.
55bebb993Sopenharmony_ci * You may obtain a copy of the License at
65bebb993Sopenharmony_ci *
75bebb993Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
85bebb993Sopenharmony_ci *
95bebb993Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
105bebb993Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
115bebb993Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
125bebb993Sopenharmony_ci * See the License for the specific language governing permissions and
135bebb993Sopenharmony_ci * limitations under the License.
145bebb993Sopenharmony_ci */
155bebb993Sopenharmony_ci
165bebb993Sopenharmony_ci#include "fsync.h"
175bebb993Sopenharmony_ci#include "file_fs_impl.h"
185bebb993Sopenharmony_ci
195bebb993Sopenharmony_ci#include <cstring>
205bebb993Sopenharmony_ci#include <unistd.h>
215bebb993Sopenharmony_ci
225bebb993Sopenharmony_ci
235bebb993Sopenharmony_cinamespace OHOS {
245bebb993Sopenharmony_cinamespace CJSystemapi {
255bebb993Sopenharmony_ci
265bebb993Sopenharmony_ciusing namespace std;
275bebb993Sopenharmony_ci
285bebb993Sopenharmony_ciint FsyncImpl::Fsync(int32_t fd)
295bebb993Sopenharmony_ci{
305bebb993Sopenharmony_ci    LOGI("FS_TEST::FsyncImpl::Fsync start");
315bebb993Sopenharmony_ci    std::unique_ptr<uv_fs_t, decltype(CommonFunc::FsReqCleanup)*> fsync_req = {
325bebb993Sopenharmony_ci        new (std::nothrow) uv_fs_t, CommonFunc::FsReqCleanup };
335bebb993Sopenharmony_ci    if (!fsync_req) {
345bebb993Sopenharmony_ci        LOGE("Failed to request heap memory.");
355bebb993Sopenharmony_ci        return ENOMEM;
365bebb993Sopenharmony_ci    }
375bebb993Sopenharmony_ci    int ret = uv_fs_fsync(nullptr, fsync_req.get(), fd, nullptr);
385bebb993Sopenharmony_ci    if (ret < 0) {
395bebb993Sopenharmony_ci        LOGE("Failed to transfer data associated with file descriptor: %{public}d", fd);
405bebb993Sopenharmony_ci        return ret;
415bebb993Sopenharmony_ci    }
425bebb993Sopenharmony_ci    LOGI("FS_TEST::FsyncImpl::Fsync success");
435bebb993Sopenharmony_ci    return ret;
445bebb993Sopenharmony_ci}
455bebb993Sopenharmony_ci
465bebb993Sopenharmony_ci} // namespace CJSystemapi
475bebb993Sopenharmony_ci} // namespace OHOS
48