12fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa/*
22fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * Copyright (C) 2013, The Android Open Source Project
32fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa *
42fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * Licensed under the Apache License, Version 2.0 (the "License");
52fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * you may not use this file except in compliance with the License.
62fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * You may obtain a copy of the License at
72fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa *
82fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa *     http://www.apache.org/licenses/LICENSE-2.0
92fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa *
102fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * Unless required by applicable law or agreed to in writing, software
112fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * distributed under the License is distributed on an "AS IS" BASIS,
122fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * See the License for the specific language governing permissions and
142fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * limitations under the License.
152fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa */
162fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
172fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa#ifndef LATINIME_FILE_UTILS_H
182fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa#define LATINIME_FILE_UTILS_H
192fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
202fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa#include "defines.h"
212fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
222fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasanamespace latinime {
232fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
242fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasaclass FileUtils {
252fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa public:
262fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    // Returns -1 on error.
272fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    static int getFileSize(const char *const filePath);
282fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
292fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    static bool existsDir(const char *const dirPath);
302fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
312fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    // Remove a directory and all files in the directory.
322fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    static bool removeDirAndFiles(const char *const dirPath);
332fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
342fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    static int getFilePathWithSuffixBufSize(const char *const filePath, const char *const suffix);
352fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
362fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    static void getFilePathWithSuffix(const char *const filePath, const char *const suffix,
372fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa            const int filePathBufSize, char *const outFilePath);
382fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
392fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    static int getFilePathBufSize(const char *const dirPath, const char *const fileName);
402fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
412fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    static void getFilePath(const char *const dirPath, const char *const fileName,
422fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa            const int filePathBufSize, char *const outFilePath);
432fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
442fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    // Returns whether the filePath have the suffix.
452fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    static bool getFilePathWithoutSuffix(const char *const filePath, const char *const suffix,
462fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa            const int dirPathBufSize, char *const outDirPath);
472fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
482fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    static void getDirPath(const char *const filePath, const int dirPathBufSize,
492fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa            char *const outDirPath);
502fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
512fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    static void getBasename(const char *const filePath, const int outNameBufSize,
522fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa            char *const outName);
532fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa
542fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa private:
552fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    DISALLOW_IMPLICIT_CONSTRUCTORS(FileUtils);
56a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard
57a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard    static bool removeDirAndFiles(const char *const dirPath, const int maxTries);
582fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa};
592fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa} // namespace latinime
602fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa#endif /* LATINIME_FILE_UTILS_H */
61