137a09cd7Sopenharmony_ci/* 237a09cd7Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 337a09cd7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 437a09cd7Sopenharmony_ci * you may not use this file except in compliance with the License. 537a09cd7Sopenharmony_ci * You may obtain a copy of the License at 637a09cd7Sopenharmony_ci * 737a09cd7Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 837a09cd7Sopenharmony_ci * 937a09cd7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1037a09cd7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1137a09cd7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1237a09cd7Sopenharmony_ci * See the License for the specific language governing permissions and 1337a09cd7Sopenharmony_ci * limitations under the License. 1437a09cd7Sopenharmony_ci */ 1537a09cd7Sopenharmony_ci 1637a09cd7Sopenharmony_ci#include "file_operation.h" 1737a09cd7Sopenharmony_ci 1837a09cd7Sopenharmony_ci#include <cstdio> 1937a09cd7Sopenharmony_ci#include <string> 2037a09cd7Sopenharmony_ci#include <fcntl.h> 2137a09cd7Sopenharmony_ci#include <mutex> 2237a09cd7Sopenharmony_ci#include <unistd.h> 2337a09cd7Sopenharmony_ci#include <sys/stat.h> 2437a09cd7Sopenharmony_ci#include "bits/fcntl.h" 2537a09cd7Sopenharmony_ci#include "errors.h" 2637a09cd7Sopenharmony_ci#include "thermal_log.h" 2737a09cd7Sopenharmony_ci 2837a09cd7Sopenharmony_cinamespace OHOS { 2937a09cd7Sopenharmony_cinamespace PowerMgr { 3037a09cd7Sopenharmony_cistatic std::mutex g_mutex; 3137a09cd7Sopenharmony_ciint32_t FileOperation::CreateNodeDir(std::string dir) 3237a09cd7Sopenharmony_ci{ 3337a09cd7Sopenharmony_ci THERMAL_HILOGD(COMP_SVC, "Enter"); 3437a09cd7Sopenharmony_ci if (access(dir.c_str(), 0) != ERR_OK) { 3537a09cd7Sopenharmony_ci int flag = mkdir(dir.c_str(), S_IRWXU | S_IRWXG | S_IROTH| S_IXOTH); 3637a09cd7Sopenharmony_ci if (flag == ERR_OK) { 3737a09cd7Sopenharmony_ci THERMAL_HILOGI(COMP_SVC, "Create directory successfully."); 3837a09cd7Sopenharmony_ci } else { 3937a09cd7Sopenharmony_ci THERMAL_HILOGE(COMP_SVC, "Fail to create directory, flag: %{public}d", flag); 4037a09cd7Sopenharmony_ci return flag; 4137a09cd7Sopenharmony_ci } 4237a09cd7Sopenharmony_ci } else { 4337a09cd7Sopenharmony_ci THERMAL_HILOGE(COMP_SVC, "This directory already exists."); 4437a09cd7Sopenharmony_ci } 4537a09cd7Sopenharmony_ci return ERR_OK; 4637a09cd7Sopenharmony_ci} 4737a09cd7Sopenharmony_ci 4837a09cd7Sopenharmony_ciint32_t FileOperation::CreateNodeFile(std::string filePath) 4937a09cd7Sopenharmony_ci{ 5037a09cd7Sopenharmony_ci if (access(filePath.c_str(), 0) != 0) { 5137a09cd7Sopenharmony_ci int32_t fd = open(filePath.c_str(), O_CREAT | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP| S_IROTH); 5237a09cd7Sopenharmony_ci if (fd < ERR_OK) { 5337a09cd7Sopenharmony_ci THERMAL_HILOGE(COMP_SVC, "open failed to file. path=%{public}s", filePath.c_str()); 5437a09cd7Sopenharmony_ci return fd; 5537a09cd7Sopenharmony_ci } 5637a09cd7Sopenharmony_ci close(fd); 5737a09cd7Sopenharmony_ci } else { 5837a09cd7Sopenharmony_ci THERMAL_HILOGI(COMP_SVC, "the file already exists. path=%{public}s", filePath.c_str()); 5937a09cd7Sopenharmony_ci } 6037a09cd7Sopenharmony_ci return ERR_OK; 6137a09cd7Sopenharmony_ci} 6237a09cd7Sopenharmony_ci 6337a09cd7Sopenharmony_ciint32_t FileOperation::WriteFile(std::string path, std::string buf, size_t size) 6437a09cd7Sopenharmony_ci{ 6537a09cd7Sopenharmony_ci FILE *stream = fopen(path.c_str(), "w+"); 6637a09cd7Sopenharmony_ci if (stream == nullptr) { 6737a09cd7Sopenharmony_ci return ERR_INVALID_VALUE; 6837a09cd7Sopenharmony_ci } 6937a09cd7Sopenharmony_ci size_t ret = fwrite(buf.c_str(), strlen(buf.c_str()), 1, stream); 7037a09cd7Sopenharmony_ci if (ret == ERR_OK) { 7137a09cd7Sopenharmony_ci THERMAL_HILOGE(COMP_SVC, "ret=%{public}zu", ret); 7237a09cd7Sopenharmony_ci } 7337a09cd7Sopenharmony_ci int32_t state = fseek(stream, 0, SEEK_SET); 7437a09cd7Sopenharmony_ci if (state != ERR_OK) { 7537a09cd7Sopenharmony_ci fclose(stream); 7637a09cd7Sopenharmony_ci return state; 7737a09cd7Sopenharmony_ci } 7837a09cd7Sopenharmony_ci state = fclose(stream); 7937a09cd7Sopenharmony_ci if (state != ERR_OK) { 8037a09cd7Sopenharmony_ci return state; 8137a09cd7Sopenharmony_ci } 8237a09cd7Sopenharmony_ci return ERR_OK; 8337a09cd7Sopenharmony_ci} 8437a09cd7Sopenharmony_ci 8537a09cd7Sopenharmony_ciint32_t FileOperation::ReadFile(const char *path, char *buf, size_t size) 8637a09cd7Sopenharmony_ci{ 8737a09cd7Sopenharmony_ci std::lock_guard<std::mutex> lck(g_mutex); 8837a09cd7Sopenharmony_ci int32_t ret = -1; 8937a09cd7Sopenharmony_ci 9037a09cd7Sopenharmony_ci int32_t fd = open(path, O_RDONLY, S_IRUSR | S_IRGRP | S_IROTH); 9137a09cd7Sopenharmony_ci if (fd < ERR_OK) { 9237a09cd7Sopenharmony_ci THERMAL_HILOGE(COMP_SVC, "open failed to file."); 9337a09cd7Sopenharmony_ci return fd; 9437a09cd7Sopenharmony_ci } 9537a09cd7Sopenharmony_ci 9637a09cd7Sopenharmony_ci ret = read(fd, buf, size); 9737a09cd7Sopenharmony_ci if (ret < ERR_OK) { 9837a09cd7Sopenharmony_ci THERMAL_HILOGE(COMP_SVC, "failed to read file."); 9937a09cd7Sopenharmony_ci close(fd); 10037a09cd7Sopenharmony_ci return ret; 10137a09cd7Sopenharmony_ci } 10237a09cd7Sopenharmony_ci 10337a09cd7Sopenharmony_ci close(fd); 10437a09cd7Sopenharmony_ci buf[(size > 0) ? (size - 1) : 0] = '\0'; 10537a09cd7Sopenharmony_ci return ERR_OK; 10637a09cd7Sopenharmony_ci} 10737a09cd7Sopenharmony_ci 10837a09cd7Sopenharmony_ciint32_t FileOperation::ConvertInt(const std::string &value) 10937a09cd7Sopenharmony_ci{ 11037a09cd7Sopenharmony_ci return std::stoi(value); 11137a09cd7Sopenharmony_ci} 11237a09cd7Sopenharmony_ci} // namespace PowerMgr 11337a09cd7Sopenharmony_ci} // namespace OHOS