NoUI=0\r
SrcArchiveFile=ffftp.cab\r
DstExeFile=ffftp.exe\r
-DialogTitle=FFFTP Ver.1.98e\r
+DialogTitle=FFFTP Ver.1.98f\r
ForFreeSoftWare=0\r
EXEpressFor=EXEpress CX 5 Professional Licensed Edition\r
Greeting0=Click Next button to start install...\r
UseUnInstall=1\r
UseEXEpressUninstaller=1\r
UseEXEpressUninstallerFolder=\r
-UnInstallTitle=FFFTP Ver.1.98e\r
+UnInstallTitle=FFFTP Ver.1.98f\r
UnInstallKey=FFFTP\r
UnInstallFile=\r
UnInstallArgs=\r
NoUI=0\r
SrcArchiveFile=ffftp.cab\r
DstExeFile=ffftp.exe\r
-DialogTitle=FFFTP Ver.1.98e\r
+DialogTitle=FFFTP Ver.1.98f\r
ForFreeSoftWare=0\r
EXEpressFor=EXEpress CX 5 Professional Licensed Edition\r
Greeting0=FFFTP\82ð\83C\83\93\83X\83g\81[\83\8b\82µ\82Ü\82·\81B\r
UseUnInstall=1\r
UseEXEpressUninstaller=1\r
UseEXEpressUninstallerFolder=\r
-UnInstallTitle=FFFTP Ver.1.98e\r
+UnInstallTitle=FFFTP Ver.1.98f\r
UnInstallKey=FFFTP\r
UnInstallFile=\r
UnInstallArgs=\r
set DIR_ENG_DOC=..\doc\eng\r
set DIR_DIST=..\dist\r
\r
-set FFFTP_VERSION=1.98e\r
+set FFFTP_VERSION=1.98f\r
{\r
UTF8Length--;\r
UTF16Length = MultiByteToWideChar(CP_UTF8, 0, pUTF8, UTF8Length, pUTF16, UTF16Length);\r
- SJISLength = NewSJISLength;\r
NewSJISLength = WideCharToMultiByte(CP_ACP, 0, pUTF16, UTF16Length, NULL, 0, NULL, NULL);\r
}\r
free(pUTF16);\r
// UTF-16 LE変換した時に文字数が増減する位置がUTF-8の区切り\r
- NewUTF16Length = UTF16Length;\r
- while(UTF8Length > 0 && NewUTF16Length >= UTF16Length)\r
- {\r
- UTF8Length--;\r
- UTF16Length = NewUTF16Length;\r
- NewUTF16Length = MultiByteToWideChar(CP_UTF8, 0, pUTF8, UTF8Length, NULL, 0);\r
- }\r
if(pNewUTF8Length)\r
{\r
+ NewUTF16Length = UTF16Length;\r
+ while(UTF8Length > 0 && NewUTF16Length >= UTF16Length)\r
+ {\r
+ UTF8Length--;\r
+ NewUTF16Length = MultiByteToWideChar(CP_UTF8, 0, pUTF8, UTF8Length, NULL, 0);\r
+ }\r
if(UTF16Length > 0)\r
UTF8Length++;\r
*pNewUTF8Length = UTF8Length;\r
SrcLength = SrcLength / 2;\r
}\r
}\r
- // UTF-8の場合、不完全な文字は常に変換されない\r
UTF16Length = MultiByteToWideChar(CP_UTF8, 0, pSrc, SrcLength, NULL, 0);\r
\r
// サイズ0 or バッファサイズより大きい場合は\r
\r
#define SELECT_ALL 0 /* 全選択 */\r
#define SELECT_REGEXP 1 /* 検索式を入力して選択 */\r
+// ローカル側自動更新\r
+#define SELECT_LIST 2 /* リストに含まれるファイルを選択 */\r
\r
/*===== 検索方法 =====*/\r
\r
void GetRemoteDirForWnd(int Mode, int *CancelCheckWork);\r
void GetLocalDirForWnd(void);\r
void ReSortDispList(int Win, int *CancelCheckWork);\r
-void SelectFileInList(HWND hWnd, int Type);\r
+// ローカル側自動更新\r
+//void SelectFileInList(HWND hWnd, int Type);\r
+void SelectFileInList(HWND hWnd, int Type, FILELIST *Base);\r
void FindFileInList(HWND hWnd, int Type);\r
// void WildCard2RegExp(char *Str);\r
int GetCurrentItem(int Win);\r
#define HAVE_OPENVMS\r
\r
// 全体に影響する設定はここに記述する予定\r
-// 内部をUTF-8として扱いマルチバイト文字ワイド文字APIラッパーを使用する\r
-#include "mbswrapper.h"\r
-// OpenSSL用ソケットラッパーを使用する\r
-#include "socketwrapper.h"\r
-// プロセスをDLL Injectionから保護する\r
-#include "protectprocess.h"\r
// 使用するCPUを1個に限定する(マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策)\r
//#define DISABLE_MULTI_CPUS\r
// ファイル転送用のネットワークバッファを無効にする(通信中止後にリモートのディレクトリが表示されないバグ対策)\r
/* HP NonStop Server 用のコードを有効にする */\r
#define HAVE_TANDEM\r
\r
+// 内部をUTF-8として扱いマルチバイト文字ワイド文字APIラッパーを使用する\r
+#include "mbswrapper.h"\r
+// OpenSSL用ソケットラッパーを使用する\r
+#include "socketwrapper.h"\r
+// プロセスをDLL Injectionから保護する\r
+#include "protectprocess.h"\r
+\r
// FTPES対応\r
if(CryptMode == CRYPT_FTPES)\r
{\r
- if(IsOpenSSLLoaded() && (Sts = command(ContSock, Reply, CancelCheckWork, "AUTH TLS")) == 234)\r
+ if(IsOpenSSLLoaded() && ((Sts = command(ContSock, Reply, CancelCheckWork, "AUTH TLS")) == 234 || (Sts = command(ContSock, Reply, CancelCheckWork, "AUTH SSL")) == 234))\r
{\r
if(AttachSSL(ContSock, INVALID_SOCKET, CancelCheckWork))\r
{\r
\r
-- Extended command line options.\r
\r
+-- Changed to try SSL when a host cannot recognize TLS on FTPS Explicit.\r
+\r
+-- Fixed bugs that corruption was caused when strings were converted from\r
+ UTF-8 to Shift_JIS on Windows Vista or later.\r
+\r
+-- Changed to refresh the local view automatically when files in the current\r
+ directory are modified.\r
+\r
\r
Outline\r
-------\r
\r
-- Extended command line options.\r
\r
+-- Changed to try SSL when a host cannot recognize TLS on FTPS Explicit.\r
+\r
+-- Fixed bugs that corruption was caused when strings were converted from\r
+ UTF-8 to Shift_JIS on Windows Vista or later.\r
+\r
+-- Changed to refresh the local view automatically when files in the current\r
+ directory are modified.\r
+\r
Changes in Ver.1.98e\r
--------------------\r
\r
\r
\81E\83R\83}\83\93\83h\83\89\83C\83\93\83I\83v\83V\83\87\83\93\82ð\8ag\92£\82µ\82Ü\82µ\82½\81B\r
\r
+\81EFTPS Explicit\82Å\83z\83X\83g\82ªTLS\82ð\8eó\82¯\95t\82¯\82È\82¢\8fê\8d\87\82É\91±\82¯\82ÄSSL\82ð\8e\8e\82·\82æ\82¤\82É\r
+\81@\95Ï\8dX\82µ\82Ü\82µ\82½\81B\r
+\r
+\81EWindows Vista\88È\8d~\82Å\95¶\8e\9a\97ñ\82ªUTF-8\82©\82çShift_JIS\82Ö\95Ï\8a·\82³\82ê\82é\8e\9e\82É\94j\91¹\82·\82é\r
+\81@\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\81B\r
+\r
+\81E\83\8d\81[\83J\83\8b\91¤\82Ì\83t\83H\83\8b\83_\93à\82Ì\83t\83@\83C\83\8b\82ª\95Ï\8dX\82³\82ê\82½\8e\9e\82É\83\8d\81[\83J\83\8b\91¤\82Ì\83t\83@\83C\83\8b\r
+\81@\88ê\97\97\82ð\8e©\93®\93I\82É\8dX\90V\82·\82é\82æ\82¤\82É\95Ï\8dX\82µ\82Ü\82µ\82½\81B\r
+\r
\r
Ver 1.96d\88È\91O\82Ö\96ß\82·\8fê\8d\87\r
-----------------------\r
\r
\81E\83R\83}\83\93\83h\83\89\83C\83\93\83I\83v\83V\83\87\83\93\82ð\8ag\92£\82µ\82Ü\82µ\82½\81B\r
\r
+\81EFTPS Explicit\82Å\83z\83X\83g\82ªTLS\82ð\8eó\82¯\95t\82¯\82È\82¢\8fê\8d\87\82É\91±\82¯\82ÄSSL\82ð\8e\8e\82·\82æ\82¤\82É\r
+\81@\95Ï\8dX\82µ\82Ü\82µ\82½\81B\r
+\r
+\81EWindows Vista\88È\8d~\82Å\95¶\8e\9a\97ñ\82ªUTF-8\82©\82çShift_JIS\82Ö\95Ï\8a·\82³\82ê\82é\8e\9e\82É\94j\91¹\82·\82é\r
+\81@\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\81B\r
+\r
+\81E\83\8d\81[\83J\83\8b\91¤\82Ì\83t\83H\83\8b\83_\93à\82Ì\83t\83@\83C\83\8b\82ª\95Ï\8dX\82³\82ê\82½\8e\9e\82É\83\8d\81[\83J\83\8b\91¤\82Ì\83t\83@\83C\83\8b\r
+\81@\88ê\97\97\82ð\8e©\93®\93I\82É\8dX\90V\82·\82é\82æ\82¤\82É\95Ï\8dX\82µ\82Ü\82µ\82½\81B\r
+\r
\81¡Ver 1.98e\r
\r
\81E\83z\83X\83g\82Ì\83p\83X\83\8f\81[\83h\82ª\90³\82µ\82\82È\82¢\8fê\8d\87\82É\83p\83X\83\8f\81[\83h\82ð\8eè\93®\82Å\8dÄ\93x\93ü\97Í\82µ\82Ä\82à\r
extern HWND hHelpWin;\r
// 外部アプリケーションへドロップ後にローカル側のファイル一覧に作業フォルダが表示されるバグ対策\r
extern int SuppressRefresh;\r
+// ローカル側自動更新\r
+extern HANDLE ChangeNotification;\r
\r
/* 設定値 */\r
extern int LocalWidth;\r
SetYenTail(Cur);\r
strcat(Cur, Pos->File);\r
}\r
- if(SHGetFileInfoM(Cur, 0, &FileInfo, sizeof(SHFILEINFO), SHGFI_SMALLICON | SHGFI_ICON) != 0)\r
+ if(SHGetFileInfo(Cur, 0, &FileInfo, sizeof(SHFILEINFO), SHGFI_SMALLICON | SHGFI_ICON) != 0)\r
{\r
if(ImageList_AddIcon(ListImgFileIcon, FileInfo.hIcon) >= 0)\r
{\r
SetLocalDirHist(Scan);\r
DispLocalFreeSpace(Scan);\r
\r
+ // ローカル側自動更新\r
+ if(ChangeNotification != INVALID_HANDLE_VALUE)\r
+ FindCloseChangeNotification(ChangeNotification);\r
+ ChangeNotification = FindFirstChangeNotification(Scan, FALSE, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_LAST_WRITE);\r
+\r
/* ディレクトリ/ファイル */\r
\r
SetYenTail(Scan);\r
}\r
else\r
{\r
+ // 読みにくいのでリファクタリング\r
+// if((((Sort & SORT_MASK_ORD) == SORT_EXT) &&\r
+// ((Cmp = _mbsicmp(GetFileExt(Name), GetFileExt(Pos->File))) > 0)) ||\r
+//#if defined(HAVE_TANDEM)\r
+// ((AskHostType() == HTYPE_TANDEM) &&\r
+// ((Sort & SORT_MASK_ORD) == SORT_EXT) &&\r
+// ((Cmp = Attr - Pos->Attr) > 0)) ||\r
+//#endif\r
+// (((Sort & SORT_MASK_ORD) == SORT_SIZE) &&\r
+// ((Cmp = Size - Pos->Size) > 0)) ||\r
+// (((Sort & SORT_MASK_ORD) == SORT_DATE) &&\r
+// ((Cmp = CompareFileTime(Time, &Pos->Time)) > 0)))\r
+// {\r
+// break;\r
+// }\r
if((((Sort & SORT_MASK_ORD) == SORT_EXT) &&\r
- ((Cmp = _mbsicmp(GetFileExt(Name), GetFileExt(Pos->File))) > 0)) ||\r
+ ((Cmp = _mbsicmp(GetFileExt(Name), GetFileExt(Pos->File))) > 0)))\r
+ break;\r
#if defined(HAVE_TANDEM)\r
- ((AskHostType() == HTYPE_TANDEM) &&\r
+ if(((AskHostType() == HTYPE_TANDEM) &&\r
((Sort & SORT_MASK_ORD) == SORT_EXT) &&\r
- ((Cmp = Attr - Pos->Attr) > 0)) ||\r
+ ((Cmp = Attr - Pos->Attr) > 0)))\r
+ break;\r
#endif\r
- (((Sort & SORT_MASK_ORD) == SORT_SIZE) &&\r
- ((Cmp = Size - Pos->Size) > 0)) ||\r
- (((Sort & SORT_MASK_ORD) == SORT_DATE) &&\r
- ((Cmp = CompareFileTime(Time, &Pos->Time)) > 0)))\r
- {\r
+ if(((Sort & SORT_MASK_ORD) == SORT_SIZE) &&\r
+ ((Cmp = Size - Pos->Size) > 0))\r
+ break;\r
+ if(((Sort & SORT_MASK_ORD) == SORT_DATE) &&\r
+ ((Cmp = CompareFileTime(Time, &Pos->Time)) > 0))\r
break;\r
- }\r
\r
if(((Sort & SORT_MASK_ORD) == SORT_NAME) || (Cmp == 0))\r
{\r
* なし\r
*----------------------------------------------------------------------------*/\r
\r
-void SelectFileInList(HWND hWnd, int Type)\r
+// ローカル側自動更新\r
+//void SelectFileInList(HWND hWnd, int Type)\r
+void SelectFileInList(HWND hWnd, int Type, FILELIST *Base)\r
{\r
int Win;\r
int WinDst;\r
}\r
}\r
break;\r
+\r
+ // ローカル側自動更新\r
+ case SELECT_LIST :\r
+ for(i = 0; i < Num; i++)\r
+ {\r
+ LvItem.state = 0;\r
+ GetNodeName(Win, i, Name, FMAX_PATH);\r
+ if(SearchFileList(Name, Base, COMP_STRICT) != NULL)\r
+ LvItem.state = LVIS_SELECTED;\r
+ LvItem.mask = LVIF_STATE;\r
+ LvItem.iItem = i;\r
+ LvItem.stateMask = LVIS_SELECTED;\r
+ LvItem.iSubItem = 0;\r
+ SendMessage(hWnd, LVM_SETITEMSTATE, i, (LPARAM)&LvItem);\r
+ }\r
+ break;\r
}\r
return;\r
}\r
<P>\81\99\83~\83\89\81[\83\8a\83\93\83O\8b@\94\\82É\82æ\82è\81A\83\8d\81[\83J\83\8b\91¤\82Ì\83t\83@\83C\83\8b\8d\\90¬\82ð\82»\82Ì\82Ü\82Ü\83z\83X\83g\91¤\82É\8dÄ\8c»\82Å\82«\82Ü\82·\81BWeb\83y\81[\83W\82Ì\83t\83@\83C\83\8b\93]\91\97\82È\82Ç\82É\95Ö\97\98\82Å\82·\81B</P>\r
<P><BR><STRONG>\93®\8dì\8am\94F\8aÂ\8b«</STRONG></P>\r
<P style="MARGIN-RIGHT: 0px" \r
-dir=ltr>FFFTP\82Í\88È\89º\82Ì\8aÂ\8b«\82Å\93®\8dì\82ð\8am\94F\82µ\82Ä\82¢\82Ü\82·\81B<BR> Windows 7 \r
-(32bit)<BR> Windows Vista (32bit)<BR> \r
-Windows XP (32bit)<BR> Windows 2000</P>\r
+dir=ltr>FFFTP\82Í\88È\89º\82Ì\8aÂ\8b«\82Å\93®\8dì\82ð\8am\94F\82µ\82Ä\82¢\82Ü\82·\81B<BR> Windows 7 (32bit/64bit)<BR> Windows Vista (32bit/64bit)<BR> Windows XP (32bit)<BR> Windows 2000</P>\r
<P style="MARGIN-RIGHT: 0px" dir=ltr> </P></BODY></HTML>\r
static DWORD MainThreadId;\r
// ポータブル版判定\r
static char PortableFilePath[FMAX_PATH+1];\r
-int PortableVersion;\r
+static int PortableVersion;\r
+// ローカル側自動更新\r
+HANDLE ChangeNotification = INVALID_HANDLE_VALUE;\r
\r
\r
/*===== グローバルなワーク =====*/\r
\r
switch (message)\r
{\r
+ // ローカル側自動更新\r
+ case WM_CREATE :\r
+ SetTimer(hWnd, 1, 1000, NULL);\r
+ break;\r
+\r
+ // ローカル側自動更新\r
// 自動切断対策\r
case WM_TIMER :\r
- if(wParam == 1)\r
+ switch(wParam)\r
+ {\r
+ case 1:\r
+ if(WaitForSingleObject(ChangeNotification, 0) == WAIT_OBJECT_0)\r
+ {\r
+ if(AskUserOpeDisabled() == NO)\r
+ {\r
+ FILELIST* Base;\r
+ FindNextChangeNotification(ChangeNotification);\r
+ Base = NULL;\r
+ MakeSelectedFileList(WIN_LOCAL, NO, NO, &Base, &CancelFlg);\r
+ GetLocalDirForWnd();\r
+ SelectFileInList(GetLocalHwnd(), SELECT_LIST, Base);\r
+ }\r
+ }\r
+ break;\r
+ case 2:\r
NoopProc();\r
+ break;\r
+ }\r
break;\r
\r
case WM_COMMAND :\r
{\r
case MENU_CONNECT :\r
// 自動切断対策\r
- KillTimer(hWnd, 1);\r
+ KillTimer(hWnd, 2);\r
ConnectProc(DLG_TYPE_CON, -1);\r
// 自動切断対策\r
if(AskNoopInterval() > 0)\r
- SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+ SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL);\r
break;\r
\r
case MENU_CONNECT_NUM :\r
// 自動切断対策\r
- KillTimer(hWnd, 1);\r
+ KillTimer(hWnd, 2);\r
ConnectProc(DLG_TYPE_CON, (int)lParam);\r
// 自動切断対策\r
if(AskNoopInterval() > 0)\r
- SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+ SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL);\r
if(AskConnecting() == YES)\r
{\r
if(HIWORD(wParam) & OPT_MIRROR)\r
\r
case MENU_SET_CONNECT :\r
// 自動切断対策\r
- KillTimer(hWnd, 1);\r
+ KillTimer(hWnd, 2);\r
ConnectProc(DLG_TYPE_SET, -1);\r
// 自動切断対策\r
if(AskNoopInterval() > 0)\r
- SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+ SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL);\r
break;\r
\r
case MENU_QUICK :\r
// 自動切断対策\r
- KillTimer(hWnd, 1);\r
+ KillTimer(hWnd, 2);\r
QuickConnectProc();\r
// 自動切断対策\r
if(AskNoopInterval() > 0)\r
- SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+ SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL);\r
break;\r
\r
case MENU_DISCONNECT :\r
case MENU_HIST_19 :\r
case MENU_HIST_20 :\r
// 自動切断対策\r
- KillTimer(hWnd, 1);\r
+ KillTimer(hWnd, 2);\r
HistoryConnectProc(LOWORD(wParam));\r
// 自動切断対策\r
if(AskNoopInterval() > 0)\r
- SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+ SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL);\r
break;\r
\r
case MENU_UPDIR :\r
break;\r
\r
case REFRESH_LOCAL :\r
+ // デッドロック対策\r
+ if(AskUserOpeDisabled() == YES)\r
+ break;\r
GetLocalDirForWnd();\r
break;\r
\r
break;\r
\r
case MENU_SELECT_ALL :\r
- SelectFileInList(hWndCurFocus, SELECT_ALL);\r
+ // ローカル側自動更新\r
+// SelectFileInList(hWndCurFocus, SELECT_ALL);\r
+ SelectFileInList(hWndCurFocus, SELECT_ALL, NULL);\r
break;\r
\r
case MENU_SELECT :\r
- SelectFileInList(hWndCurFocus, SELECT_REGEXP);\r
+ // ローカル側自動更新\r
+// SelectFileInList(hWndCurFocus, SELECT_REGEXP);\r
+ SelectFileInList(hWndCurFocus, SELECT_REGEXP, NULL);\r
break;\r
\r
case MENU_FIND :\r
break;\r
\r
case WM_DESTROY :\r
+ // ローカル側自動更新\r
+ KillTimer(hWnd, 1);\r
+ if(ChangeNotification != INVALID_HANDLE_VALUE)\r
+ FindCloseChangeNotification(ChangeNotification);\r
// WSACleanup();\r
// DestroyWindow(hWndFtp);\r
PostQuitMessage(0);\r
LPCSTR pMultiLimit;\r
LPWSTR pWideLimit;\r
DWORD Code;\r
+ int TempCount;\r
WCHAR Temp[8];\r
if(CodePage != CP_UTF8 || dwFlags != 0)\r
return MultiByteToWideChar(CodePage, dwFlags, lpMultiByteStr, cbMultiByte, lpWideCharStr, cchWideChar);\r
continue;\r
if(lpWideCharStr)\r
{\r
- WideCount += PutNextCharW(lpWideCharStr, pWideLimit, &lpWideCharStr, Code);\r
- if(lpWideCharStr >= pWideLimit)\r
+ TempCount = PutNextCharW(lpWideCharStr, pWideLimit, &lpWideCharStr, Code);\r
+ WideCount += TempCount;\r
+ if(TempCount == 0 && lpWideCharStr >= pWideLimit)\r
{\r
WideCount = 0;\r
break;\r
LPCWSTR pWideLimit;\r
LPSTR pMultiLimit;\r
DWORD Code;\r
+ int TempCount;\r
CHAR Temp[8];\r
if(CodePage != CP_UTF8 || dwFlags != 0)\r
return WideCharToMultiByte(CodePage, dwFlags, lpWideCharStr, cchWideChar, lpMultiByteStr, cbMultiByte, lpDefaultChar, lpUsedDefaultChar);\r
continue;\r
if(lpMultiByteStr)\r
{\r
- MultiCount += PutNextCharM(lpMultiByteStr, pMultiLimit, &lpMultiByteStr, Code);\r
- if(lpMultiByteStr >= pMultiLimit)\r
+ TempCount = PutNextCharM(lpMultiByteStr, pMultiLimit, &lpMultiByteStr, Code);\r
+ MultiCount += TempCount;\r
+ if(TempCount == 0 && lpMultiByteStr >= pMultiLimit)\r
{\r
MultiCount = 0;\r
break;\r
return r;\r
}\r
\r
+HANDLE FindFirstChangeNotificationM(LPCSTR lpPathName, BOOL bWatchSubtree, DWORD dwNotifyFilter)\r
+{\r
+ HANDLE r = INVALID_HANDLE_VALUE;\r
+ wchar_t* pw0 = NULL;\r
+START_ROUTINE\r
+ pw0 = DuplicateMtoW(lpPathName, -1);\r
+ r = FindFirstChangeNotificationW(pw0, bWatchSubtree, dwNotifyFilter);\r
+END_ROUTINE\r
+ FreeDuplicatedString(pw0);\r
+ return r;\r
+}\r
+\r
DWORD GetLogicalDriveStringsM(DWORD nBufferLength, LPSTR lpBuffer)\r
{\r
DWORD r = 0;\r
#undef FindNextFile\r
#define FindNextFile FindNextFileM\r
BOOL FindNextFileM(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData);\r
+#undef FindFirstChangeNotification\r
+#define FindFirstChangeNotification FindFirstChangeNotificationM\r
+HANDLE FindFirstChangeNotificationM(LPCSTR lpPathName, BOOL bWatchSubtree, DWORD dwNotifyFilter);\r
#undef GetLogicalDriveStrings\r
#define GetLogicalDriveStrings GetLogicalDriveStringsM\r
DWORD GetLogicalDriveStringsM(DWORD nBufferLength, LPSTR lpBuffer);\r