1// Copyright (c) 2023 Huawei Device Co., Ltd.
2// Licensed under the Apache License, Version 2.0 (the "License");
3// you may not use this file except in compliance with the License.
4// You may obtain a copy of the License at
5//
6//     http://www.apache.org/licenses/LICENSE-2.0
7//
8// Unless required by applicable law or agreed to in writing, software
9// distributed under the License is distributed on an "AS IS" BASIS,
10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11// See the License for the specific language governing permissions and
12// limitations under the License.
13
14//! Directory_ex provides an enhanced interface for some file and path related
15//! operations.
16
17/// File permissions for the owner of the file (user) - Read, write, and
18/// execute.
19pub const S_IRWXU: u32 = 0o700;
20
21/// File permissions for the group - Read, write, and execute.
22pub const S_IRWXG: u32 = 0o070;
23
24/// File permissions for others (non-owner/non-group members) - Read, write, and
25/// execute.
26pub const S_IRWXO: u32 = 0o007;
27
28/// File permission for the owner to read.
29pub const S_IRUSR: u32 = 0o400;
30
31/// File permission for the group to read.
32pub const S_IRGRP: u32 = 0o040;
33
34/// File permission for others (non-owner/non-group members) to read.
35pub const S_IROTH: u32 = 0o004;
36
37/// Maximum length of a file path in characters
38pub const PATH_MAX: usize = 4096;
39
40#[cxx::bridge(namespace = "OHOS")]
41/// Module directory_ex::ffi. Includes interfaces which will call c++
42/// counterparts via FFI.
43pub mod ffi {
44    #[allow(dead_code)]
45    unsafe extern "C++" {
46        include!("commonlibrary/c_utils/base/include/directory_ex.h");
47        /// Get the full absolute path to the current program.
48        pub fn RustGetCurrentProcFullFileName() -> String;
49
50        /// Get the absolute path of the current program.
51        pub fn RustGetCurrentProcPath() -> String;
52
53        /// Obtain the path to the corresponding file by the full path.
54        pub fn RustExtractFilePath(fileFullName: &String) -> String;
55
56        /// Obtain the name to the corresponding file by the full path.
57        pub fn RustExtractFileName(fileFullName: &String) -> String;
58
59        /// Obtain the filename extension to the corresponding file by the full
60        /// path.
61        pub fn RustExtractFileExt(fileName: &String) -> String;
62
63        /// Determine whether the path has ended with '/', and returns the path
64        /// after removing '/', otherwise returns the path directly.
65        pub fn RustExcludeTrailingPathDelimiter(path: &String) -> String;
66
67        /// Determine whether the path has ended with "/", and returns the path
68        /// after adding '/', otherwise returns the path directly.
69        pub fn RustIncludeTrailingPathDelimiter(path: &String) -> String;
70
71        /// Get names of all files under `path` recursively.
72        pub fn RustGetDirFiles(path: &String, files: &mut Vec<String>);
73
74        /// Judge if the path is empty.
75        pub fn IsEmptyFolder(path: &CxxString) -> bool;
76
77        /// If there are problems such as 'Permission Denied', the creation may
78        /// also fail.
79        pub fn ForceCreateDirectory(path: &CxxString) -> bool;
80
81        /// Delete the specified dir.
82        pub fn ForceRemoveDirectory(path: &CxxString) -> bool;
83
84        /// Remove the file specified by fileName.
85        pub fn RemoveFile(fileName: &CxxString) -> bool;
86
87        /// Get the folder size(bytes).
88        pub fn GetFolderSize(path: &CxxString) -> u64;
89
90        /// Change the file authority.
91        pub fn ChangeModeFile(fileName: &CxxString, mode: &u32) -> bool;
92
93        /// Change authority of the directory specified by path and all of its
94        /// subdirectories.
95        pub fn ChangeModeDirectory(path: &CxxString, mode: &u32) -> bool;
96
97        /// Get real path from relative path.
98        pub fn RustPathToRealPath(path: &String, realPath: &mut String) -> bool;
99    }
100}
101