|
@@ -832,52 +832,64 @@ TString DecodeOpenMode(ui32 mode0) {
|
|
|
|
|
|
TStringBuilder r;
|
|
|
|
|
|
-#define F(flag) \
|
|
|
- if ((mode & flag) == flag) { \
|
|
|
- mode &= ~flag; \
|
|
|
- if (r) { \
|
|
|
- r << TStringBuf("|"); \
|
|
|
- } \
|
|
|
- r << TStringBuf(#flag); \
|
|
|
- }
|
|
|
-
|
|
|
- F(RdWr)
|
|
|
- F(RdOnly)
|
|
|
- F(WrOnly)
|
|
|
-
|
|
|
- F(CreateAlways)
|
|
|
- F(CreateNew)
|
|
|
- F(OpenAlways)
|
|
|
- F(TruncExisting)
|
|
|
- F(ForAppend)
|
|
|
- F(Transient)
|
|
|
- F(CloseOnExec)
|
|
|
-
|
|
|
- F(Temp)
|
|
|
- F(Sync)
|
|
|
- F(Direct)
|
|
|
- F(DirectAligned)
|
|
|
- F(Seq)
|
|
|
- F(NoReuse)
|
|
|
- F(NoReadAhead)
|
|
|
-
|
|
|
- F(AX)
|
|
|
- F(AR)
|
|
|
- F(AW)
|
|
|
- F(ARW)
|
|
|
-
|
|
|
- F(AXOther)
|
|
|
- F(AWOther)
|
|
|
- F(AROther)
|
|
|
- F(AXGroup)
|
|
|
- F(AWGroup)
|
|
|
- F(ARGroup)
|
|
|
- F(AXUser)
|
|
|
- F(AWUser)
|
|
|
- F(ARUser)
|
|
|
+ struct TFlagCombo {
|
|
|
+ ui32 Value;
|
|
|
+ TStringBuf Name;
|
|
|
+ };
|
|
|
+
|
|
|
+ static constexpr TFlagCombo knownFlagCombos[]{
|
|
|
+
|
|
|
+#define F(flag) {flag, #flag}
|
|
|
+
|
|
|
+ F(RdWr),
|
|
|
+ F(RdOnly),
|
|
|
+ F(WrOnly),
|
|
|
+
|
|
|
+ F(CreateAlways),
|
|
|
+ F(CreateNew),
|
|
|
+ F(OpenAlways),
|
|
|
+ F(TruncExisting),
|
|
|
+ F(ForAppend),
|
|
|
+ F(Transient),
|
|
|
+ F(CloseOnExec),
|
|
|
+
|
|
|
+ F(Temp),
|
|
|
+ F(Sync),
|
|
|
+ F(Direct),
|
|
|
+ F(DirectAligned),
|
|
|
+ F(Seq),
|
|
|
+ F(NoReuse),
|
|
|
+ F(NoReadAhead),
|
|
|
+
|
|
|
+ F(AX),
|
|
|
+ F(AR),
|
|
|
+ F(AW),
|
|
|
+ F(ARW),
|
|
|
+
|
|
|
+ F(AXOther),
|
|
|
+ F(AWOther),
|
|
|
+ F(AROther),
|
|
|
+ F(AXGroup),
|
|
|
+ F(AWGroup),
|
|
|
+ F(ARGroup),
|
|
|
+ F(AXUser),
|
|
|
+ F(AWUser),
|
|
|
+ F(ARUser),
|
|
|
|
|
|
#undef F
|
|
|
|
|
|
+ };
|
|
|
+
|
|
|
+ for (const auto& [flag, name] : knownFlagCombos) {
|
|
|
+ if ((mode & flag) == flag) {
|
|
|
+ mode &= ~flag;
|
|
|
+ if (r) {
|
|
|
+ r << '|';
|
|
|
+ }
|
|
|
+ r << name;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (mode != 0) {
|
|
|
if (r) {
|
|
|
r << TStringBuf("|");
|
|
@@ -890,7 +902,7 @@ TString DecodeOpenMode(ui32 mode0) {
|
|
|
return "0";
|
|
|
}
|
|
|
|
|
|
- return r;
|
|
|
+ return std::move(r);
|
|
|
}
|
|
|
|
|
|
class TFile::TImpl: public TAtomicRefCount<TImpl> {
|