blob: 701ee6519a193ca22e9b6d338d6a82d6d9fc39e3 (
plain)
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
|
#pragma once
#include <sys/stat.h>
#include <unistd.h>
#include <string>
class FSFileFlags
{
unsigned long _flags = 0, _actual_flags = 0;
bool _valid = false;
public:
FSFileFlags(const std::string &path);
void Apply(const std::string &path, bool force = false);
inline bool Valid() const { return _valid; }
bool Immutable() const;
void SetImmutable(bool v);
bool Append() const;
void SetAppend(bool v);
#if defined(__APPLE__) || defined(__FreeBSD__)
bool Hidden() const;
void SetHidden(bool v);
#endif
};
#if defined(__APPLE__) || defined(__FreeBSD__)
# define FS_FLAGS_CONTAIN_IMMUTABLE(flags) (((flags) & (UF_IMMUTABLE | SF_IMMUTABLE)) != 0)
# define FS_FLAGS_WITHOUT_IMMUTABLE(flags) ((flags) & (~(UF_IMMUTABLE | SF_IMMUTABLE)))
# define FS_FLAGS_WITH_IMMUTABLE(flags) ((flags) | (UF_IMMUTABLE))
# define FS_FLAGS_CONTAIN_APPEND(flags) (((flags) & (UF_APPEND | SF_APPEND)) != 0)
# define FS_FLAGS_WITHOUT_APPEND(flags) ((flags) & (~(UF_APPEND | SF_APPEND)))
# define FS_FLAGS_WITH_APPEND(flags) ((flags) | (UF_APPEND))
# define FS_FLAGS_CONTAIN_HIDDEN(flags) (((flags) & (UF_HIDDEN)) != 0)
# define FS_FLAGS_WITHOUT_HIDDEN(flags) ((flags) & (~(UF_HIDDEN)))
# define FS_FLAGS_WITH_HIDDEN(flags) ((flags) | (UF_HIDDEN))
#else
# define FS_FLAGS_CONTAIN_IMMUTABLE(flags) (((flags) & FS_IMMUTABLE_FL) != 0)
# define FS_FLAGS_WITHOUT_IMMUTABLE(flags) ((flags) & (~FS_IMMUTABLE_FL))
# define FS_FLAGS_WITH_IMMUTABLE(flags) ((flags) | FS_IMMUTABLE_FL)
# define FS_FLAGS_CONTAIN_APPEND(flags) (((flags) & FS_APPEND_FL) != 0)
# define FS_FLAGS_WITHOUT_APPEND(flags) ((flags) & (~FS_APPEND_FL))
# define FS_FLAGS_WITH_APPEND(flags) ((flags) | (FS_APPEND_FL))
#endif
|