1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
#pragma once
#include <util/system/defaults.h>
#include <util/system/sysstat.h>
#include <util/system/fs.h>
#include <util/generic/string.h>
#include <util/generic/yexception.h>
#include <sys/types.h>
#include <cerrno>
#include <cstdlib>
#ifdef _win32_
#include <util/system/winint.h>
#include <direct.h>
#include <malloc.h>
#include <time.h>
#include <io.h>
#include "dirent_win.h"
// these live in mktemp_system.cpp
extern "C" int mkstemps(char* path, int slen);
char* mkdtemp(char* path);
#else
#ifdef _sun_
#include <alloca.h>
char* mkdtemp(char* path);
#endif
#include <unistd.h>
#include <pwd.h>
#include <dirent.h>
#ifndef DT_DIR
#include <sys/stat.h>
#endif
#endif
bool IsDir(const TString& path);
int mkpath(char* path, int mode = 0777);
TString GetHomeDir();
void MakeDirIfNotExist(const char* path, int mode = 0777);
inline void MakeDirIfNotExist(const TString& path, int mode = 0777) {
MakeDirIfNotExist(path.data(), mode);
}
/// Create path making parent directories as needed
void MakePathIfNotExist(const char* path, int mode = 0777);
void SlashFolderLocal(TString& folder);
bool correctpath(TString& filename);
bool resolvepath(TString& folder, const TString& home);
char GetDirectorySeparator();
const char* GetDirectorySeparatorS();
void RemoveDirWithContents(TString dirName);
const char* GetFileNameComponent(const char* f);
inline TString GetFileNameComponent(const TString& f) {
return GetFileNameComponent(f.data());
}
/// RealPath doesn't guarantee trailing separator to be stripped or left in place for directories.
TString RealPath(const TString& path); // throws
TString RealLocation(const TString& path); /// throws; last file name component doesn't need to exist
TString GetSystemTempDir();
int MakeTempDir(char path[/*FILENAME_MAX*/], const char* prefix);
int ResolvePath(const char* rel, const char* abs, char res[/*FILENAME_MAX*/], bool isdir = false);
TString ResolvePath(const char* rel, const char* abs, bool isdir = false);
TString ResolvePath(const char* path, bool isDir = false);
TString ResolveDir(const char* path);
bool SafeResolveDir(const char* path, TString& result);
TString GetDirName(const TString& path);
TString GetBaseName(const TString& path);
TString StripFileComponent(const TString& fileName);
class TExistenceChecker {
public:
TExistenceChecker(bool strict = false)
: Strict(strict)
{
}
void SetStrict(bool strict) {
Strict = strict;
}
bool IsStrict() const {
return Strict;
}
const char* Check(const char* fname) const {
if (!fname || !*fname)
return nullptr;
if (Strict) {
NFs::EnsureExists(fname);
} else if (!NFs::Exists(fname))
fname = nullptr;
return fname;
}
private:
bool Strict;
};
|