mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-11 21:03:05 +08:00
+fix: some more issues around "File Change Monitoring"
This commit is contained in:
parent
6349e355ef
commit
8903122724
@ -136,7 +136,7 @@
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<EnableASAN>true</EnableASAN>
|
||||
<EnableASAN>false</EnableASAN>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
@ -163,7 +163,7 @@
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<EnableASAN>true</EnableASAN>
|
||||
<EnableASAN>false</EnableASAN>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
|
||||
@ -38,7 +38,7 @@
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<EnableASAN>true</EnableASAN>
|
||||
<EnableASAN>false</EnableASAN>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)'=='15.0'">v141</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||
@ -50,7 +50,7 @@
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)'=='15.0'">v141</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||
<EnableASAN>true</EnableASAN>
|
||||
<EnableASAN>false</EnableASAN>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
|
||||
@ -1244,36 +1244,38 @@ void LoadSettings()
|
||||
StrgReset(Settings2.FileDlgFilters, pPathBuffer);
|
||||
|
||||
// handle deprecated (typo) key 'FileCheckInverval'
|
||||
constexpr const int64_t defaultFCI = 2000;
|
||||
constexpr const LONG64 NOTSETFCI = -111LL;
|
||||
constexpr const LONG64 defaultFCI = 2000LL;
|
||||
constexpr const WCHAR* deprecatedKeyART = L"AutoReloadTimeout";
|
||||
constexpr const WCHAR* deprecatedKeyFCI = L"FileCheckInverval";
|
||||
constexpr const WCHAR* correctKeyFCI = L"FileCheckInterval";
|
||||
|
||||
int const autoReload = IniSectionGetInt(IniSecSettings2, deprecatedKeyART, -111); // deprecated
|
||||
if (autoReload != -111) {
|
||||
LONG64 const autoReload = IniSectionGetLongLong(IniSecSettings2, deprecatedKeyART, NOTSETFCI); // deprecated
|
||||
if (autoReload != NOTSETFCI) {
|
||||
IniSectionDelete(IniSecSettings2, deprecatedKeyART, true); // deprecated
|
||||
bDirtyFlag = true;
|
||||
}
|
||||
int const dfci = IniSectionGetInt(IniSecSettings2, deprecatedKeyFCI, -111); // get deprecated typo setting
|
||||
if (dfci != -111) {
|
||||
LONG64 const dfci = IniSectionGetLongLong(IniSecSettings2, deprecatedKeyFCI, NOTSETFCI); // get deprecated typo setting
|
||||
if (dfci != NOTSETFCI) {
|
||||
IniSectionDelete(IniSecSettings2, deprecatedKeyFCI, true); // deprecated wrong (typo) name
|
||||
bDirtyFlag = true;
|
||||
}
|
||||
int const deprecatedFCI = max_i(autoReload, dfci);
|
||||
LONG64 const adpDefaultFCI = (max_ll(autoReload, dfci) == NOTSETFCI) ? defaultFCI :
|
||||
clampll(max_ll(autoReload, dfci), MIN_FC_POLL_INTERVAL, MAX_FC_POLL_INTERVAL);
|
||||
|
||||
Settings2.FileCheckInterval = IniSectionGetLongLong(IniSecSettings2, correctKeyFCI, deprecatedFCI);
|
||||
Settings2.FileCheckInterval = clampll(IniSectionGetLongLong(IniSecSettings2, correctKeyFCI, adpDefaultFCI), MIN_FC_POLL_INTERVAL, MAX_FC_POLL_INTERVAL);
|
||||
|
||||
if (Settings2.FileCheckInterval == defaultFCI) {
|
||||
if (deprecatedFCI != defaultFCI) {
|
||||
IniSectionDelete(IniSecSettings2, correctKeyFCI, true); // is default
|
||||
bDirtyFlag = true;
|
||||
}
|
||||
}
|
||||
else if (Settings2.FileCheckInterval == static_cast<int64_t>(deprecatedFCI)) {
|
||||
IniSectionSetLongLong(IniSecSettings2, correctKeyFCI, Settings2.FileCheckInterval);
|
||||
IniSectionDelete(IniSecSettings2, correctKeyFCI, true); // is default
|
||||
bDirtyFlag = true;
|
||||
}
|
||||
FileWatching.FileCheckInterval = clampll(Settings2.FileCheckInterval, MIN_FC_POLL_INTERVAL, MAX_FC_POLL_INTERVAL);
|
||||
else if (Settings2.FileCheckInterval == adpDefaultFCI) {
|
||||
IniSectionSetLongLong(IniSecSettings2, correctKeyFCI, adpDefaultFCI);
|
||||
bDirtyFlag = true;
|
||||
}
|
||||
|
||||
FileWatching.FileCheckInterval = Settings2.FileCheckInterval;
|
||||
|
||||
|
||||
IniSectionGetString(IniSecSettings2, L"FileChangedIndicator", L"[@]", Settings2.FileChangedIndicator, COUNTOF(Settings2.FileChangedIndicator));
|
||||
|
||||
|
||||
@ -102,23 +102,23 @@ __forceinline size_t SizeOfMemStrg(LPCVOID lpMemory) {
|
||||
/* */
|
||||
/**************************************************/
|
||||
|
||||
#define limit_len(len) (((len) < STRINGW_MAX_CCH) ? (len) : (STRINGW_MAX_CCH - 1))
|
||||
__forceinline size_t limit_len(const size_t len) { return (((len) < STRINGW_MAX_CCH) ? max_s((8 / sizeof(wchar_t)), len) : (STRINGW_MAX_CCH - 1)); }
|
||||
|
||||
__forceinline STRINGW* ToWStrg(HSTRINGW hstr) { return (STRINGW*)hstr; }
|
||||
|
||||
inline static void * AllocBuffer(const size_t len, bool bZeroMem) {
|
||||
inline static void * AllocBuffer(const size_t len) {
|
||||
if (!s_hndlProcessHeap) {
|
||||
s_hndlProcessHeap = GetProcessHeap();
|
||||
}
|
||||
return AllocMemStrg(limit_len(len) * sizeof(wchar_t), bZeroMem ? HEAP_ZERO_MEMORY : 0);
|
||||
return AllocMemStrg(limit_len(len) * sizeof(wchar_t), HEAP_ZERO_MEMORY);
|
||||
}
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
inline static void * ReAllocBuffer(void* pdata, const size_t len, bool bZeroMem, bool bInPlace) {
|
||||
inline static void * ReAllocBuffer(void* pdata, const size_t len, bool bInPlace) {
|
||||
if (!s_hndlProcessHeap) {
|
||||
s_hndlProcessHeap = GetProcessHeap();
|
||||
}
|
||||
DWORD const dwFlags = (bZeroMem ? HEAP_ZERO_MEMORY : 0) | (bInPlace ? HEAP_REALLOC_IN_PLACE_ONLY : 0);
|
||||
DWORD const dwFlags = HEAP_ZERO_MEMORY | (bInPlace ? HEAP_REALLOC_IN_PLACE_ONLY : 0);
|
||||
return ReAllocMemStrg(pdata, limit_len(len) * sizeof(wchar_t), dwFlags);
|
||||
}
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -148,18 +148,16 @@ inline static void FreeBufferW(STRINGW* pstr) {
|
||||
}
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
static void ReAllocW(STRINGW* pstr, size_t len, bool bZeroMem)
|
||||
static void ReAllocW(STRINGW* pstr, size_t len)
|
||||
{
|
||||
len = limit_len(len);
|
||||
size_t const alloc_len = len + 1;
|
||||
if (!pstr->data) {
|
||||
pstr->data = AllocBuffer(alloc_len, bZeroMem);
|
||||
pstr->data = AllocBuffer(alloc_len);
|
||||
if (pstr->data) { // init
|
||||
pstr->alloc_length = LengthOfBuffer(pstr->data);
|
||||
assert("inconsistent data" && (alloc_len != (pstr->alloc_length * sizeof(wchar_t))));
|
||||
assert("inconsistent data" && (alloc_len == pstr->alloc_length));
|
||||
pstr->data_length = 0;
|
||||
pstr->data[len] = WCHR_NULL; // ensure terminating zero
|
||||
pstr->data[0] = WCHR_NULL; // ensure empty
|
||||
}
|
||||
else {
|
||||
pstr->alloc_length = 0;
|
||||
@ -167,17 +165,15 @@ static void ReAllocW(STRINGW* pstr, size_t len, bool bZeroMem)
|
||||
}
|
||||
}
|
||||
else if (pstr->alloc_length < alloc_len) {
|
||||
pstr->data = ReAllocBuffer(pstr->data, alloc_len, bZeroMem, false);
|
||||
pstr->data = ReAllocBuffer(pstr->data, alloc_len, false);
|
||||
pstr->alloc_length = LengthOfBuffer(pstr->data);
|
||||
assert("inconsistent data 1" && (alloc_len != (pstr->alloc_length * sizeof(wchar_t))));
|
||||
assert("inconsistent data 1" && (alloc_len == pstr->alloc_length));
|
||||
/// original memory block is moved, so data_length is not touched
|
||||
assert("inconsistent data 2" && (alloc_len > pstr->data_length));
|
||||
pstr->data[pstr->data_length] = WCHR_NULL; // ensure terminating zero
|
||||
}
|
||||
else {
|
||||
if (bZeroMem) {
|
||||
ZeroMemory(&(pstr->data[pstr->data_length]), (pstr->alloc_length - pstr->data_length) * sizeof(wchar_t));
|
||||
}
|
||||
ZeroMemory(&(pstr->data[pstr->data_length]), (pstr->alloc_length - pstr->data_length) * sizeof(wchar_t));
|
||||
}
|
||||
}
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -187,7 +183,7 @@ static void AllocCopyW(STRINGW* pstr, STRINGW* pDest, size_t copy_len, size_t co
|
||||
size_t new_len = copy_len + extra_len;
|
||||
if (0 < new_len)
|
||||
{
|
||||
ReAllocW(pDest, new_len, true);
|
||||
ReAllocW(pDest, new_len);
|
||||
StringCchCopyNW(pDest->data, pDest->alloc_length, (pstr->data + copy_index), copy_len);
|
||||
pDest->data_length = StrlenW(pstr->data);
|
||||
}
|
||||
@ -196,7 +192,7 @@ static void AllocCopyW(STRINGW* pstr, STRINGW* pDest, size_t copy_len, size_t co
|
||||
|
||||
static void SetCopyW(STRINGW* pstr, size_t len, LPCWSTR p)
|
||||
{
|
||||
ReAllocW(pstr, len, false);
|
||||
ReAllocW(pstr, len);
|
||||
if (pstr->data) {
|
||||
StringCchCopyNW(pstr->data, pstr->alloc_length, p, len);
|
||||
pstr->data_length = StrlenW(pstr->data);
|
||||
@ -210,7 +206,7 @@ static void SetCopyW(STRINGW* pstr, size_t len, LPCWSTR p)
|
||||
static LPWSTR CopyOldDataW(STRINGW* pstr, size_t* outLen)
|
||||
{
|
||||
size_t const old_siz = StrlenW(pstr->data) + 1;
|
||||
LPWSTR const ptr = AllocBuffer(old_siz, FALSE);
|
||||
LPWSTR const ptr = AllocBuffer(old_siz);
|
||||
if (ptr) {
|
||||
StringCchCopyW(ptr, old_siz, pstr->data ? pstr->data : L"");
|
||||
*outLen = wcslen(ptr);
|
||||
@ -225,7 +221,7 @@ static void FreeUnusedData(STRINGW* pstr, size_t keep_length)
|
||||
{
|
||||
size_t const new_alloc_len = max_s(keep_length + 1, pstr->data_length + 1);
|
||||
if ((pstr->alloc_length > new_alloc_len) ) {
|
||||
pstr->data = ReAllocBuffer(pstr->data, new_alloc_len, true, false);
|
||||
pstr->data = ReAllocBuffer(pstr->data, new_alloc_len, false);
|
||||
pstr->alloc_length = LengthOfBuffer(pstr->data);
|
||||
pstr->data_length = StrlenW(pstr->data);
|
||||
}
|
||||
@ -237,7 +233,7 @@ static void CopyConcatW(STRINGW *pstr, size_t len1, LPCWSTR p1, size_t len2, LPC
|
||||
{
|
||||
size_t const new_len = len1 + len2;
|
||||
if (0 < new_len) {
|
||||
ReAllocW(pstr, new_len, true);
|
||||
ReAllocW(pstr, new_len);
|
||||
StringCchCopyNW(pstr->data, pstr->alloc_length, p1, len1);
|
||||
StringCchCatNW(pstr->data, pstr->alloc_length, p2, len2);
|
||||
pstr->data_length = StrlenW(pstr->data);
|
||||
@ -252,7 +248,7 @@ static void ConcatW(STRINGW* pstr, size_t len, LPCWSTR p)
|
||||
|
||||
size_t const new_len = pstr->data_length + len;
|
||||
if (pstr->alloc_length <= new_len) {
|
||||
ReAllocW(pstr, new_len, true); // copies old data
|
||||
ReAllocW(pstr, new_len); // copies old data
|
||||
}
|
||||
StringCchCatNW(pstr->data, pstr->alloc_length, p, len);
|
||||
pstr->data_length = StrlenW(pstr->data);
|
||||
@ -410,7 +406,7 @@ static void FormatW(STRINGW* pstr, LPCWSTR fmt, va_list args)
|
||||
max_len += item_len;
|
||||
}
|
||||
|
||||
ReAllocW(pstr, max_len, true);
|
||||
ReAllocW(pstr, max_len);
|
||||
|
||||
StringCchVPrintfW(pstr->data, pstr->alloc_length, fmt, orig_list);
|
||||
pstr->data_length = StrlenW(pstr->data);
|
||||
@ -429,7 +425,7 @@ static void FormatW(STRINGW* pstr, LPCWSTR fmt, va_list args)
|
||||
|
||||
HSTRINGW STRAPI StrgCreate(LPCWSTR str)
|
||||
{
|
||||
STRINGW *pstr = AllocBuffer(sizeof(STRINGW), true);
|
||||
STRINGW *pstr = AllocBuffer(sizeof(STRINGW));
|
||||
if (!pstr)
|
||||
return NULL;
|
||||
if (str)
|
||||
@ -534,7 +530,7 @@ void STRAPI StrgEmpty(const HSTRINGW hstr, bool truncate)
|
||||
if (!pstr)
|
||||
return;
|
||||
if (!pstr->data) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
return;
|
||||
}
|
||||
(pstr->data)[0] = WCHR_NULL;
|
||||
@ -552,7 +548,7 @@ void STRAPI StrgSetAt(HSTRINGW hstr, const size_t index, const wchar_t ch)
|
||||
if (!pstr)
|
||||
return;
|
||||
if (!(pstr->data)) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
}
|
||||
if (index >= pstr->data_length)
|
||||
{
|
||||
@ -571,7 +567,7 @@ wchar_t STRAPI StrgGetAt(const HSTRINGW hstr, const size_t index)
|
||||
if (!pstr)
|
||||
return WCHR_NULL;
|
||||
if (!pstr->data) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
}
|
||||
if (index >= pstr->data_length)
|
||||
{
|
||||
@ -632,7 +628,7 @@ size_t STRAPI StrgInsert(HSTRINGW hstr, size_t index, LPCWSTR str)
|
||||
if (!pstr)
|
||||
return STRINGW_INVALID_IDX;
|
||||
if (!pstr->data) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
}
|
||||
|
||||
size_t const ins_len = StrlenW(str);
|
||||
@ -646,7 +642,7 @@ size_t STRAPI StrgInsert(HSTRINGW hstr, size_t index, LPCWSTR str)
|
||||
new_len += ins_len;
|
||||
|
||||
if (pstr->alloc_length <= new_len) {
|
||||
ReAllocW(pstr, new_len, true);
|
||||
ReAllocW(pstr, new_len);
|
||||
}
|
||||
wmemmove_s((pstr->data + index + ins_len), (pstr->alloc_length - index - ins_len),
|
||||
(pstr->data + index), (new_len - index - ins_len + 1));
|
||||
@ -664,14 +660,14 @@ size_t STRAPI StrgInsertCh(HSTRINGW hstr, size_t index, const wchar_t c)
|
||||
if (!pstr)
|
||||
return 0;
|
||||
if (!pstr->data) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
}
|
||||
size_t const new_len = pstr->data_length + 1;
|
||||
if (index >= new_len)
|
||||
index = new_len - 1;
|
||||
|
||||
if (pstr->alloc_length <= new_len) {
|
||||
ReAllocW(pstr, new_len, true);
|
||||
ReAllocW(pstr, new_len);
|
||||
}
|
||||
wmemmove_s((pstr->data + index + 1), (pstr->alloc_length - index - 1),
|
||||
(pstr->data + index), (new_len - index));
|
||||
@ -689,7 +685,7 @@ size_t STRAPI StrgReplace(HSTRINGW hstr, LPCWSTR pOld, LPCWSTR pNew)
|
||||
if (!pstr)
|
||||
return 0;
|
||||
if (!pstr->data) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
}
|
||||
|
||||
size_t const src_len = StrlenW(pOld);
|
||||
@ -718,7 +714,7 @@ size_t STRAPI StrgReplace(HSTRINGW hstr, LPCWSTR pOld, LPCWSTR pNew)
|
||||
size_t const new_len = old_len + (repl_len - src_len) * count;
|
||||
|
||||
if (pstr->alloc_length <= new_len) {
|
||||
ReAllocW(pstr, new_len, true);
|
||||
ReAllocW(pstr, new_len);
|
||||
}
|
||||
start = pstr->data;
|
||||
end = pstr->data + pstr->data_length;
|
||||
@ -757,7 +753,7 @@ size_t STRAPI StrgReplaceCh(HSTRINGW hstr, const wchar_t chOld, const wchar_t ch
|
||||
if (!pstr)
|
||||
return 0;
|
||||
if (!pstr->data) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
}
|
||||
|
||||
size_t count = 0;
|
||||
@ -786,7 +782,7 @@ size_t STRAPI StrgRemoveCh(HSTRINGW hstr, const wchar_t chRemove)
|
||||
if (!pstr)
|
||||
return 0;
|
||||
if (!pstr->data) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
}
|
||||
|
||||
LPWSTR source = pstr->data;
|
||||
@ -819,7 +815,7 @@ size_t STRAPI StrgDelete(HSTRINGW hstr, const size_t index, size_t count)
|
||||
if (!pstr)
|
||||
return 0;
|
||||
if (!pstr->data) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
}
|
||||
|
||||
size_t const len = pstr->data_length;
|
||||
@ -849,7 +845,7 @@ int STRAPI StrgResetFromUTF8(HSTRINGW hstr, const char* str)
|
||||
if (!pstr || !str)
|
||||
return -1;
|
||||
int const len = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0) + 1;
|
||||
ReAllocW(pstr, len, true);
|
||||
ReAllocW(pstr, len);
|
||||
int const res = MultiByteToWideChar(CP_UTF8, 0, str, -1, pstr->data, (int)pstr->alloc_length);
|
||||
pstr->data_length = StrlenW(pstr->data);
|
||||
return res;
|
||||
@ -863,7 +859,7 @@ void STRAPI StrgToUpper(HSTRINGW hstr)
|
||||
if (!pstr)
|
||||
return;
|
||||
if (!pstr->data) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
}
|
||||
if (pstr->data)
|
||||
_wcsupr_s(pstr->data, pstr->data_length);
|
||||
@ -877,7 +873,7 @@ void STRAPI StrgToLower(HSTRINGW hstr)
|
||||
if (!pstr)
|
||||
return;
|
||||
if (!pstr->data) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
}
|
||||
if (pstr->data)
|
||||
_wcslwr_s(pstr->data, pstr->data_length);
|
||||
@ -891,7 +887,7 @@ void STRAPI StrgReverse(HSTRINGW hstr)
|
||||
if (!pstr)
|
||||
return;
|
||||
if (!pstr->data) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
}
|
||||
_wcsrev(pstr->data);
|
||||
}
|
||||
@ -904,7 +900,7 @@ void STRAPI StrgTrimRight(HSTRINGW hstr, const wchar_t wch)
|
||||
if (!pstr)
|
||||
return;
|
||||
if (!pstr->data) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
}
|
||||
|
||||
LPWSTR start = pstr->data;
|
||||
@ -937,7 +933,7 @@ void STRAPI StrgTrimLeft(HSTRINGW hstr, const wchar_t wch)
|
||||
if (!pstr)
|
||||
return;
|
||||
if (!pstr->data) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
}
|
||||
|
||||
LPWSTR start = pstr->data;
|
||||
@ -1026,7 +1022,7 @@ HSTRINGW STRAPI StrgMid(HSTRINGW hstr, const size_t start, size_t count)
|
||||
if (!pstr)
|
||||
return NULL;
|
||||
if (!pstr->data) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
}
|
||||
|
||||
if (start + count > pstr->data_length)
|
||||
@ -1056,7 +1052,7 @@ HSTRINGW STRAPI StrgLeft(HSTRINGW hstr, const size_t count)
|
||||
if (!pstr)
|
||||
return NULL;
|
||||
if (!pstr->data) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
}
|
||||
|
||||
HSTRINGW hCopy = StrgCreate(NULL);
|
||||
@ -1078,7 +1074,7 @@ HSTRINGW STRAPI StrgRight(HSTRINGW hstr, const size_t count)
|
||||
if (!pstr)
|
||||
return NULL;
|
||||
if (!pstr->data) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
}
|
||||
|
||||
HSTRINGW hCopy = StrgCreate(NULL);
|
||||
@ -1115,7 +1111,7 @@ LPWSTR STRAPI StrgWriteAccessBuf(HSTRINGW hstr, size_t min_len)
|
||||
return NULL;
|
||||
|
||||
if (pstr->alloc_length <= min_len) {
|
||||
ReAllocW(pstr, min_len, true);
|
||||
ReAllocW(pstr, min_len);
|
||||
}
|
||||
return pstr->data;
|
||||
}
|
||||
@ -1127,15 +1123,13 @@ void STRAPI StrgSanitize(HSTRINGW hstr)
|
||||
if (!pstr)
|
||||
return;
|
||||
if (!pstr->data) {
|
||||
ReAllocW(pstr, 0, true);
|
||||
ReAllocW(pstr, 0);
|
||||
}
|
||||
// ensure buffer limits
|
||||
pstr->alloc_length = LengthOfBuffer(pstr->data);
|
||||
ptrdiff_t const end = (ptrdiff_t)pstr->alloc_length - 1;
|
||||
if (end >= 0) {
|
||||
if (pstr->data)
|
||||
pstr->data[end] = WCHR_NULL; // terminating zero
|
||||
}
|
||||
size_t const buflen = LengthOfBuffer(pstr->data);
|
||||
if (pstr->data && (buflen > 0))
|
||||
pstr->data[buflen - 1] = WCHR_NULL;
|
||||
pstr->alloc_length = buflen;
|
||||
pstr->data_length = StrlenW(pstr->data);
|
||||
}
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
@ -161,7 +161,7 @@ static int msgcmp(void* mqc1, void* mqc2)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int64_t sortcmp(void *mqc1, void *mqc2) {
|
||||
static LONG64 sortcmp(void *mqc1, void *mqc2) {
|
||||
const CmdMessageQueue_t *const pMQC1 = (CmdMessageQueue_t *)mqc1;
|
||||
const CmdMessageQueue_t *const pMQC2 = (CmdMessageQueue_t *)mqc2;
|
||||
return (pMQC1->delay - pMQC2->delay);
|
||||
@ -9682,9 +9682,9 @@ void EditToggleFolds(FOLD_ACTION action, bool bForceAll)
|
||||
void EditFoldClick(DocLn ln, int mode)
|
||||
{
|
||||
static struct {
|
||||
DocLn ln;
|
||||
int mode;
|
||||
int64_t iTickCount;
|
||||
DocLn ln;
|
||||
int mode;
|
||||
LONG64 iTickCount;
|
||||
} prev = { 0, 0, 0 };
|
||||
|
||||
bool fGotoFoldPoint = mode & FOLD_SIBLINGS;
|
||||
|
||||
@ -869,14 +869,14 @@ static inline int PointSizeToFontHeight(const float fPtHeight, const HDC hdc) {
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
|
||||
static inline int64_t GetTicks_ms() {
|
||||
static inline LONG64 GetTicks_ms() {
|
||||
LARGE_INTEGER freq;
|
||||
if (!QueryPerformanceFrequency(&freq)) {
|
||||
return (int64_t)GetTickCount64();
|
||||
return (LONG64)GetTickCount64();
|
||||
}
|
||||
LARGE_INTEGER ticks;
|
||||
if (!QueryPerformanceCounter(&ticks)) {
|
||||
return (int64_t)GetTickCount64();
|
||||
return (LONG64)GetTickCount64();
|
||||
}
|
||||
return (ticks.QuadPart * 1000LL) / freq.QuadPart;
|
||||
}
|
||||
|
||||
@ -155,7 +155,7 @@ static int s_iAlignMode = 0;
|
||||
static bool s_bIsAppThemed = true;
|
||||
static UINT s_msgTaskbarCreated = 0;
|
||||
static WCHAR s_wchTitleExcerpt[MIDSZ_BUFFER] = { L'\0' };
|
||||
static int64_t s_iLastCopyTime = 0;
|
||||
static LONG64 s_iLastCopyTime = 0;
|
||||
static bool s_bLastCopyFromMe = false;
|
||||
static bool s_bInMultiEditMode = false;
|
||||
static bool s_bCallTipEscDisabled = false;
|
||||
@ -445,8 +445,8 @@ static inline void _SplitUndoTransaction()
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
static void _DelayClearCallTip(const int64_t delay);
|
||||
static void _DelaySplitUndoTransaction(const int64_t delay);
|
||||
static void _DelayClearCallTip(const LONG64 delay);
|
||||
static void _DelaySplitUndoTransaction(const LONG64 delay);
|
||||
static void _RestoreActionSelection(const LONG token, DoAction doAct);
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -527,7 +527,7 @@ static int msgcmp(void* mqc1, void* mqc2)
|
||||
|
||||
#define _MQ_ms2cycl(T) (((T) + USER_TIMER_MINIMUM) / _MQ_TIMER_CYCLE)
|
||||
|
||||
static void _MQ_AppendCmd(CmdMessageQueue_t* const pMsgQCmd, int64_t cycles)
|
||||
static void _MQ_AppendCmd(CmdMessageQueue_t* const pMsgQCmd, LONG64 cycles)
|
||||
{
|
||||
if (!pMsgQCmd) { return; }
|
||||
|
||||
@ -804,7 +804,6 @@ static void _InitGlobals()
|
||||
FocusedView.CodeFoldingAvailable = false;
|
||||
FocusedView.ShowCodeFolding = true;
|
||||
|
||||
FileWatching.flagChangeNotify = FWM_DONT_CARE;
|
||||
FileWatching.FileWatchingMode = FWM_DONT_CARE;
|
||||
FileWatching.MonitoringLog = false;
|
||||
|
||||
@ -1836,9 +1835,6 @@ HWND InitInstance(const HINSTANCE hInstance, int nCmdShow)
|
||||
Encoding_Forced(s_flagSetEncoding);
|
||||
|
||||
switch (s_flagChangeNotify) {
|
||||
case FWM_NO_INIT:
|
||||
FileWatching.FileWatchingMode = Settings.FileWatchingMode;
|
||||
break;
|
||||
case FWM_DONT_CARE:
|
||||
case FWM_INDICATORSILENT:
|
||||
case FWM_MSGBOX:
|
||||
@ -1846,8 +1842,9 @@ HWND InitInstance(const HINSTANCE hInstance, int nCmdShow)
|
||||
case FWM_EXCLUSIVELOCK:
|
||||
FileWatching.FileWatchingMode = s_flagChangeNotify;
|
||||
break;
|
||||
case FWM_NO_INIT:
|
||||
default:
|
||||
FileWatching.FileWatchingMode = FWM_MSGBOX;
|
||||
FileWatching.FileWatchingMode = Settings.FileWatchingMode;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -3707,15 +3704,20 @@ LRESULT MsgCopyData(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||
}
|
||||
if (bOpened) {
|
||||
if (params->flagChangeNotify == FWM_MSGBOX) {
|
||||
FileWatching.FileWatchingMode = FWM_DONT_CARE;
|
||||
FileWatching.FileWatchingMode = FWM_MSGBOX;
|
||||
InstallFileWatching(true);
|
||||
} else if (params->flagChangeNotify == FWM_AUTORELOAD) {
|
||||
if (!FileWatching.MonitoringLog) {
|
||||
}
|
||||
else if (params->flagChangeNotify == FWM_AUTORELOAD) {
|
||||
if (FileWatching.MonitoringLog) {
|
||||
PostWMCommand(Globals.hwndMain, IDM_VIEW_CHASING_DOCTAIL);
|
||||
} else {
|
||||
FileWatching.FileWatchingMode = FWM_AUTORELOAD;
|
||||
InstallFileWatching(true);
|
||||
}
|
||||
else {
|
||||
FileWatching.FileWatchingMode = FWM_AUTORELOAD;
|
||||
}
|
||||
InstallFileWatching(true);
|
||||
}
|
||||
else if (params->flagChangeNotify == FWM_INDICATORSILENT) {
|
||||
InstallFileWatching(true);
|
||||
}
|
||||
|
||||
if (params->flagSetEncoding != CPI_NONE) {
|
||||
@ -6210,7 +6212,6 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
|
||||
_saveChgNotify = FileWatching.FileWatchingMode;
|
||||
}
|
||||
FileWatching.MonitoringLog = !FileWatching.MonitoringLog; // toggle
|
||||
FileWatching.flagChangeNotify = s_flagChangeNotify;
|
||||
SciCall_SetReadOnly(FileWatching.MonitoringLog);
|
||||
|
||||
if (FileWatching.MonitoringLog) {
|
||||
@ -6222,7 +6223,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
|
||||
SciCall_SetEndAtLastLine(false);
|
||||
} else {
|
||||
FileWatching.FileWatchingMode = _saveChgNotify;
|
||||
FileWatching.FileCheckInterval = clampll(Settings2.FileCheckInterval, MIN_FC_POLL_INTERVAL, MAX_FC_POLL_INTERVAL);
|
||||
FileWatching.FileCheckInterval = Settings2.FileCheckInterval;
|
||||
SciCall_SetEndAtLastLine(!Settings.ScrollPastEOF);
|
||||
}
|
||||
Sci_ScrollSelectionToView();
|
||||
@ -8563,7 +8564,7 @@ inline static LRESULT _MsgNotifyLean(const SCNotification *const scn, bool* bMod
|
||||
}
|
||||
}
|
||||
if (*bModified) {
|
||||
int64_t const timeout = Settings2.UndoTransactionTimeout;
|
||||
LONG64 const timeout = Settings2.UndoTransactionTimeout;
|
||||
if (timeout != 0LL) {
|
||||
if (!bInUndoRedoStep) {
|
||||
_DelaySplitUndoTransaction(max_ll(_MQ_IMMEDIATE, timeout));
|
||||
@ -9671,7 +9672,7 @@ static void _DelayUpdateStatusbar(const int delay, const bool bForceRedraw)
|
||||
//
|
||||
// _DelayUpdateToolbar()
|
||||
//
|
||||
static void _DelayUpdateToolbar(const int64_t delay)
|
||||
static void _DelayUpdateToolbar(const LONG64 delay)
|
||||
{
|
||||
CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(Globals.hwndMain, IDT_TIMER_UPDATE_TOOLBAR, 0LL);
|
||||
_MQ_AppendCmd(&mqc, _MQ_ms2cycl(delay));
|
||||
@ -9682,7 +9683,7 @@ static void _DelayUpdateToolbar(const int64_t delay)
|
||||
//
|
||||
// _DelayUpdateTitlebar()
|
||||
//
|
||||
static void _DelayUpdateTitlebar(const int64_t delay, const HWND hwnd)
|
||||
static void _DelayUpdateTitlebar(const LONG64 delay, const HWND hwnd)
|
||||
{
|
||||
CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(Globals.hwndMain, IDT_TIMER_UPDATE_TITLEBAR, (LPARAM)hwnd);
|
||||
_MQ_AppendCmd(&mqc, _MQ_ms2cycl(delay));
|
||||
@ -9693,7 +9694,7 @@ static void _DelayUpdateTitlebar(const int64_t delay, const HWND hwnd)
|
||||
//
|
||||
// _DelayClearCallTip()
|
||||
//
|
||||
static void _DelayClearCallTip(const int64_t delay)
|
||||
static void _DelayClearCallTip(const LONG64 delay)
|
||||
{
|
||||
CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(Globals.hwndMain, IDT_TIMER_CLEAR_CALLTIP, 0LL);
|
||||
_MQ_AppendCmd(&mqc, _MQ_ms2cycl(delay));
|
||||
@ -9704,7 +9705,7 @@ static void _DelayClearCallTip(const int64_t delay)
|
||||
//
|
||||
// _DelaySplitUndoTransaction()
|
||||
//
|
||||
static void _DelaySplitUndoTransaction(const int64_t delay)
|
||||
static void _DelaySplitUndoTransaction(const LONG64 delay)
|
||||
{
|
||||
CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(Globals.hwndMain, IDT_TIMER_UNDO_TRANSACTION, 0);
|
||||
_MQ_AppendCmd(&mqc, _MQ_ms2cycl(delay));
|
||||
@ -9715,10 +9716,10 @@ static void _DelaySplitUndoTransaction(const int64_t delay)
|
||||
//
|
||||
// MarkAllOccurrences()
|
||||
//
|
||||
void MarkAllOccurrences(const int64_t delay, const bool bForceClear)
|
||||
void MarkAllOccurrences(const LONG64 delay, const bool bForceClear)
|
||||
{
|
||||
CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(Globals.hwndMain, IDT_TIMER_CALLBACK_MRKALL, bForceClear);
|
||||
int64_t const timer = (delay < 0) ? Settings2.UpdateDelayMarkAllOccurrences : delay;
|
||||
LONG64 const timer = (delay < 0) ? Settings2.UpdateDelayMarkAllOccurrences : delay;
|
||||
_MQ_AppendCmd(&mqc, _MQ_ms2cycl(timer));
|
||||
}
|
||||
|
||||
@ -11199,10 +11200,11 @@ bool ConsistentIndentationCheck(EditFileIOStatus* status)
|
||||
//
|
||||
|
||||
static inline void _ResetFileWatchingMode() {
|
||||
FileWatching.FileWatchingMode = (s_flagChangeNotify != FWM_NO_INIT) ? s_flagChangeNotify : Settings.FileWatchingMode;
|
||||
if (FileWatching.MonitoringLog) {
|
||||
FileWatching.FileWatchingMode = FWM_AUTORELOAD;
|
||||
PostWMCommand(Globals.hwndMain, IDM_VIEW_CHASING_DOCTAIL);
|
||||
}
|
||||
FileWatching.FileWatchingMode = Settings.FileWatchingMode;
|
||||
ResetFileObservationData(true);
|
||||
}
|
||||
|
||||
@ -11252,18 +11254,20 @@ bool FileLoad(const HPATHL hfile_pth, const FileLoadFlags fLoadFlags)
|
||||
|
||||
SetSaveDone();
|
||||
|
||||
// Terminate file watching
|
||||
// Restart file watching
|
||||
AutoSaveStop();
|
||||
InstallFileWatching(false); // terminate
|
||||
InstallFileWatching(false); // terminate old
|
||||
if (Settings.ResetFileWatching) {
|
||||
_ResetFileWatchingMode();
|
||||
}
|
||||
InstallFileWatching(true);
|
||||
|
||||
Flags.bSettingsFileSoftLocked = false;
|
||||
UpdateSaveSettingsCmds();
|
||||
if (SciCall_GetZoom() != 100) {
|
||||
ShowZoomCallTip();
|
||||
}
|
||||
|
||||
|
||||
UndoRedoReset();
|
||||
|
||||
UpdateToolbar();
|
||||
@ -11420,19 +11424,14 @@ bool FileLoad(const HPATHL hfile_pth, const FileLoadFlags fLoadFlags)
|
||||
|
||||
// Install watching of the current file
|
||||
AutoSaveStop();
|
||||
if (!bReloadFile) {
|
||||
InstallFileWatching(false); // terminate previous
|
||||
if (Settings.ResetFileWatching) {
|
||||
_ResetFileWatchingMode();
|
||||
}
|
||||
InstallFileWatching(false); // terminate previous
|
||||
if (!bReloadFile && Settings.ResetFileWatching) {
|
||||
_ResetFileWatchingMode();
|
||||
}
|
||||
|
||||
// consistent settings file handling (if loaded in editor)
|
||||
Flags.bSettingsFileSoftLocked = (Path_StrgComparePathNormalized(Paths.CurrentFile, Paths.IniFile) == 0);
|
||||
|
||||
ResetFileObservationData(true);
|
||||
InstallFileWatching(true);
|
||||
|
||||
// the .LOG feature ...
|
||||
if (SciCall_GetTextLength() >= 4) {
|
||||
char tchLog[5] = { '\0', '\0', '\0', '\0', '\0' };
|
||||
@ -11513,6 +11512,10 @@ bool FileLoad(const HPATHL hfile_pth, const FileLoadFlags fLoadFlags)
|
||||
UpdateStatusbar(true);
|
||||
|
||||
Path_Release(hopen_file);
|
||||
|
||||
ResetFileObservationData(true);
|
||||
InstallFileWatching(fSuccess);
|
||||
|
||||
return fSuccess;
|
||||
}
|
||||
|
||||
@ -12612,12 +12615,11 @@ LRESULT MsgFileChangeNotify(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||
|
||||
static inline void NotifyIfFileHasChanged()
|
||||
{
|
||||
|
||||
if (IsFileChangedFlagSet() || IsFileDeletedFlagSet() || RaiseFlagIfCurrentFileChanged()) {
|
||||
PostMessage(Globals.hwndMain, WM_FILECHANGEDNOTIFY, 0, 0);
|
||||
}
|
||||
// reset Timeout interval
|
||||
s_FileChgObsvrData.iFileChangeNotifyTime = GetTicks_ms();
|
||||
InterlockedExchange64(&(s_FileChgObsvrData.iFileChangeNotifyTime), GetTicks_ms());
|
||||
}
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
@ -12630,7 +12632,7 @@ static void CALLBACK WatchTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWOR
|
||||
UNREFERENCED_PARAMETER(uMsg);
|
||||
UNREFERENCED_PARAMETER(hwnd);
|
||||
|
||||
int64_t const diff = (GetTicks_ms() - s_FileChgObsvrData.iFileChangeNotifyTime);
|
||||
LONG64 const diff = (GetTicks_ms() - InterlockedOr64(&(s_FileChgObsvrData.iFileChangeNotifyTime), 0LL));
|
||||
// Directory-Observer is not notified for continuously updated (log-)files
|
||||
if (diff > FileWatching.FileCheckInterval) {
|
||||
NotifyIfFileHasChanged();
|
||||
@ -12744,7 +12746,7 @@ void InstallFileWatching(const bool bInstall) {
|
||||
BackgroundWorker_Start(&(s_FileChgObsvrData.worker), FileChangeObserver, &s_FileChgObsvrData);
|
||||
}
|
||||
|
||||
s_FileChgObsvrData.iFileChangeNotifyTime = GetTicks_ms();
|
||||
InterlockedExchange64(&(s_FileChgObsvrData.iFileChangeNotifyTime), GetTicks_ms());
|
||||
|
||||
if (Settings2.FileCheckInterval > 0) {
|
||||
SetTimer(Globals.hwndMain, ID_WATCHTIMER, (UINT)FileWatching.FileCheckInterval, WatchTimerProc);
|
||||
|
||||
@ -126,7 +126,7 @@ void CheckAutoLoadMostRecent();
|
||||
void ShowZoomCallTip();
|
||||
void ShowWrapAroundCallTip(bool forwardSearch);
|
||||
|
||||
void MarkAllOccurrences(const int64_t delay, const bool bForceClear);
|
||||
void MarkAllOccurrences(const LONG64 delay, const bool bForceClear);
|
||||
|
||||
void UpdateToolbar();
|
||||
void UpdateStatusbar(const bool bForceRedraw);
|
||||
|
||||
@ -40,9 +40,9 @@
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<EnableASAN>true</EnableASAN>
|
||||
<EnableASAN>false</EnableASAN>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
@ -72,9 +72,9 @@
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<EnableASAN>true</EnableASAN>
|
||||
<EnableASAN>false</EnableASAN>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
|
||||
@ -330,7 +330,7 @@ typedef struct CmdMessageQueue_t {
|
||||
UINT cmd;
|
||||
WPARAM wparam;
|
||||
LPARAM lparam;
|
||||
int64_t delay;
|
||||
LONG64 delay;
|
||||
struct CmdMessageQueue_t* next;
|
||||
struct CmdMessageQueue_t* prev;
|
||||
|
||||
@ -735,8 +735,8 @@ typedef struct SETTINGS2_T {
|
||||
int FileLoadWarningMB;
|
||||
int OpacityLevel;
|
||||
int FindReplaceOpacityLevel;
|
||||
int64_t FileCheckInterval;
|
||||
int64_t UndoTransactionTimeout;
|
||||
LONG64 FileCheckInterval;
|
||||
LONG64 UndoTransactionTimeout;
|
||||
int IMEInteraction;
|
||||
int SciFontQuality;
|
||||
int LaunchInstanceWndPosOffset;
|
||||
@ -845,7 +845,7 @@ typedef struct BackgroundWorker {
|
||||
|
||||
typedef struct FCOBSRVDATA_T {
|
||||
|
||||
int64_t iFileChangeNotifyTime;
|
||||
volatile LONG64 iFileChangeNotifyTime; // multi-threaded
|
||||
|
||||
WIN32_FIND_DATA fdCurFile;
|
||||
HANDLE hEventFileChanged;
|
||||
@ -865,9 +865,8 @@ typedef struct FCOBSRVDATA_T {
|
||||
|
||||
typedef struct FILEWATCHING_T {
|
||||
|
||||
FILE_WATCHING_MODE flagChangeNotify; // <-> s_flagChangeNotify;
|
||||
FILE_WATCHING_MODE FileWatchingMode; // <-> Settings.FileWatchingMode;
|
||||
int64_t FileCheckInterval; // <-> clampll(Settings2.FileCheckInterval, MIN_FC_POLL_INTERVAL, MAX_FC_POLL_INTERVAL);
|
||||
LONG64 FileCheckInterval; // <-> clampll(Settings2.FileCheckInterval, MIN_FC_POLL_INTERVAL, MAX_FC_POLL_INTERVAL);
|
||||
bool MonitoringLog;
|
||||
|
||||
} FILEWATCHING_T, *PFILEWATCHING_T;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user