#include <stdarg.h>\r
#include <string.h>\r
#include <mbstring.h>\r
-#include <winsock.h>\r
+// IPv6対応\r
+//#include <winsock.h>\r
+#include <winsock2.h>\r
#include <windowsx.h>\r
#include <commctrl.h>\r
#include <shlobj.h>\r
\r
/*===== プロトタイプ =====*/\r
\r
-static BOOL CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+// 64ビット対応\r
+//static BOOL CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+static INT_PTR CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
\r
/*===== 外部参照 =====*/\r
\r
* BOOL TRUE/FALSE\r
*----------------------------------------------------------------------------*/\r
\r
-static BOOL CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//static BOOL CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
{\r
char Tmp[FMAX_PATH+1];\r
\r
* BOOL TRUE/FALSE\r
*----------------------------------------------------------------------------*/\r
\r
-BOOL CALLBACK ExeEscDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//BOOL CALLBACK ExeEscDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
+INT_PTR CALLBACK ExeEscDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
{\r
switch (message)\r
{\r
* BOOL TRUE/FALSE\r
*----------------------------------------------------------------------------*/\r
\r
-BOOL CALLBACK ExeEscTextDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//BOOL CALLBACK ExeEscTextDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
+INT_PTR CALLBACK ExeEscTextDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
{\r
switch (message)\r
{\r
strncpy(User, Tmp, USER_NAME_LEN);\r
}\r
\r
+ // IPv6対応\r
+ if((Pos2 = _mbschr(Pos1, '[')) != NULL && Pos2 < _mbschr(Pos1, ':'))\r
+ {\r
+ Pos1 = Pos2 + 1;\r
+ if((Pos2 = _mbschr(Pos2, ']')) != NULL)\r
+ {\r
+ memcpy(Host, Pos1, min1(Pos2-Pos1, HOST_ADRS_LEN));\r
+ Pos1 = Pos2 + 1;\r
+ }\r
+ }\r
+\r
if((Pos2 = _mbschr(Pos1, ':')) != NULL)\r
{\r
- memcpy(Host, Pos1, min1(Pos2-Pos1, HOST_ADRS_LEN));\r
+ // IPv6対応\r
+// memcpy(Host, Pos1, min1(Pos2-Pos1, HOST_ADRS_LEN));\r
+ if(strlen(Host) == 0)\r
+ memcpy(Host, Pos1, min1(Pos2-Pos1, HOST_ADRS_LEN));\r
Pos2++;\r
if(IsDigit(*Pos2))\r
{\r
}\r
else if((Pos2 = _mbschr(Pos1, '/')) != NULL)\r
{\r
- memcpy(Host, Pos1, min1(Pos2-Pos1, HOST_ADRS_LEN));\r
+ // IPv6対応\r
+// memcpy(Host, Pos1, min1(Pos2-Pos1, HOST_ADRS_LEN));\r
+ if(strlen(Host) == 0)\r
+ memcpy(Host, Pos1, min1(Pos2-Pos1, HOST_ADRS_LEN));\r
RemoveFileName(Pos2, Path);\r
strncpy(File, GetFileName(Pos2), FMAX_PATH);\r
}\r
else\r
{\r
- strncpy(Host, Pos1, HOST_ADRS_LEN);\r
+ // IPv6対応\r
+// strncpy(Host, Pos1, HOST_ADRS_LEN);\r
+ if(strlen(Host) == 0)\r
+ strncpy(Host, Pos1, HOST_ADRS_LEN);\r
}\r
\r
Sts = FFFTP_FAIL;\r
}\r
\r
\r
+// 異なるファイルが表示されるバグ修正\r
+\r
+// ShellExecute等で使用されるファイル名を修正\r
+// UNCでない場合に末尾の半角スペースは無視されるため拡張子が補完されなくなるまで半角スペースを追加\r
+// 現在UNC対応の予定は無い\r
+char* MakeDistinguishableFileName(char* Out, char* In)\r
+{\r
+ char* Fname;\r
+ char Tmp[FMAX_PATH+1];\r
+ char Tmp2[FMAX_PATH+3];\r
+ HANDLE hFind;\r
+ WIN32_FIND_DATA Find;\r
+ if(strlen(GetFileExt(GetFileName(In))) > 0)\r
+ strcpy(Out, In);\r
+ else\r
+ {\r
+ Fname = GetFileName(In);\r
+ strcpy(Tmp, In);\r
+ strcpy(Tmp2, Tmp);\r
+ strcat(Tmp2, ".*");\r
+ while(strlen(Tmp) < FMAX_PATH && (hFind = FindFirstFile(Tmp2, &Find)) != INVALID_HANDLE_VALUE)\r
+ {\r
+ do\r
+ {\r
+ if(strcmp(Find.cFileName, Fname) != 0)\r
+ break;\r
+ }\r
+ while(FindNextFile(hFind, &Find));\r
+ FindClose(hFind);\r
+ if(strcmp(Find.cFileName, Fname) != 0)\r
+ {\r
+ strcat(Tmp, " ");\r
+ strcpy(Tmp2, Tmp);\r
+ strcat(Tmp2, ".*");\r
+ }\r
+ else\r
+ break;\r
+ }\r
+ strcpy(Out, Tmp);\r
+ }\r
+ return Out;\r
+}\r
+\r
+// 環境依存の不具合対策\r
+char* GetAppTempPath(char* Buf)\r
+{\r
+ char Temp[32];\r
+ GetTempPath(MAX_PATH, Buf);\r
+ SetYenTail(Buf);\r
+ sprintf(Temp, "ffftp%08x", GetCurrentProcessId());\r
+ strcat(Buf, Temp);\r
+ return Buf;\r
+}\r
+\r