Welcome to mirror list, hosted at ThFree Co, Russian Federation.

FSFileFlags.h « mix « src « far2l - github.com/elfmz/far2l.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
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