//#define _WIN32_WINNT 0x400\r
\r
#define STRICT\r
+// IPv6対応\r
+#include <winsock2.h>\r
#include <windows.h>\r
#include <stdio.h>\r
#include <stdlib.h>\r
\r
if(hWndListLocal != NULL)\r
{\r
- LocalProcPtr = (WNDPROC)SetWindowLong(hWndListLocal, GWL_WNDPROC, (LONG)LocalWndProc);\r
+ // 64ビット対応\r
+// LocalProcPtr = (WNDPROC)SetWindowLong(hWndListLocal, GWL_WNDPROC, (LONG)LocalWndProc);\r
+ LocalProcPtr = (WNDPROC)SetWindowLongPtr(hWndListLocal, GWL_WNDPROC, (LONG_PTR)LocalWndProc);\r
\r
Tmp = SendMessage(hWndListLocal, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);\r
Tmp |= LVS_EX_FULLROWSELECT;\r
\r
if(hWndListRemote != NULL)\r
{\r
- RemoteProcPtr = (WNDPROC)SetWindowLong(hWndListRemote, GWL_WNDPROC, (LONG)RemoteWndProc);\r
+ // 64ビット対応\r
+// RemoteProcPtr = (WNDPROC)SetWindowLong(hWndListRemote, GWL_WNDPROC, (LONG)RemoteWndProc);\r
+ RemoteProcPtr = (WNDPROC)SetWindowLongPtr(hWndListRemote, GWL_WNDPROC, (LONG_PTR)RemoteWndProc);\r
\r
Tmp = SendMessage(hWndListRemote, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);\r
Tmp |= LVS_EX_FULLROWSELECT;\r
\r
void SetListViewType(void)\r
{\r
- long lStyle;\r
+ // 64ビット対応\r
+// long lStyle;\r
+ LONG_PTR lStyle;\r
\r
switch(ListType)\r
{\r
case LVS_LIST :\r
- lStyle = GetWindowLong(GetLocalHwnd(), GWL_STYLE);\r
+ // 64ビット対応\r
+// lStyle = GetWindowLong(GetLocalHwnd(), GWL_STYLE);\r
+ lStyle = GetWindowLongPtr(GetLocalHwnd(), GWL_STYLE);\r
lStyle &= ~(LVS_REPORT | LVS_LIST);\r
lStyle |= LVS_LIST;\r
- SetWindowLong(GetLocalHwnd(), GWL_STYLE, lStyle);\r
+ // 64ビット対応\r
+// SetWindowLong(GetLocalHwnd(), GWL_STYLE, lStyle);\r
+ SetWindowLongPtr(GetLocalHwnd(), GWL_STYLE, lStyle);\r
\r
- lStyle = GetWindowLong(GetRemoteHwnd(), GWL_STYLE);\r
+ // 64ビット対応\r
+// lStyle = GetWindowLong(GetRemoteHwnd(), GWL_STYLE);\r
+ lStyle = GetWindowLongPtr(GetRemoteHwnd(), GWL_STYLE);\r
lStyle &= ~(LVS_REPORT | LVS_LIST);\r
lStyle |= LVS_LIST;\r
- SetWindowLong(GetRemoteHwnd(), GWL_STYLE, lStyle);\r
+ // 64ビット対応\r
+// SetWindowLong(GetRemoteHwnd(), GWL_STYLE, lStyle);\r
+ SetWindowLongPtr(GetRemoteHwnd(), GWL_STYLE, lStyle);\r
break;\r
\r
default :\r
- lStyle = GetWindowLong(GetLocalHwnd(), GWL_STYLE);\r
+ // 64ビット対応\r
+// lStyle = GetWindowLong(GetLocalHwnd(), GWL_STYLE);\r
+ lStyle = GetWindowLongPtr(GetLocalHwnd(), GWL_STYLE);\r
lStyle &= ~(LVS_REPORT | LVS_LIST);\r
lStyle |= LVS_REPORT;\r
- SetWindowLong(GetLocalHwnd(), GWL_STYLE, lStyle);\r
+ // 64ビット対応\r
+// SetWindowLong(GetLocalHwnd(), GWL_STYLE, lStyle);\r
+ SetWindowLongPtr(GetLocalHwnd(), GWL_STYLE, lStyle);\r
\r
- lStyle = GetWindowLong(GetRemoteHwnd(), GWL_STYLE);\r
+ // 64ビット対応\r
+// lStyle = GetWindowLong(GetRemoteHwnd(), GWL_STYLE);\r
+ lStyle = GetWindowLongPtr(GetRemoteHwnd(), GWL_STYLE);\r
lStyle &= ~(LVS_REPORT | LVS_LIST);\r
lStyle |= LVS_REPORT;\r
- SetWindowLong(GetRemoteHwnd(), GWL_STYLE, lStyle);\r
+ // 64ビット対応\r
+// SetWindowLong(GetRemoteHwnd(), GWL_STYLE, lStyle);\r
+ SetWindowLongPtr(GetRemoteHwnd(), GWL_STYLE, lStyle);\r
break;\r
}\r
return;\r
\r
if(strchr("dl", *Str) != NULL)\r
{\r
- if((_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "/") == 0) ||\r
- (_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "\\") == 0))\r
- {\r
- *(Fname + strlen(Fname) - 1) = NUL;\r
- }\r
+ // 0x5Cが含まれる文字列を扱えないバグ修正\r
+// if((_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "/") == 0) ||\r
+// (_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "\\") == 0))\r
+// {\r
+// *(Fname + strlen(Fname) - 1) = NUL;\r
+// }\r
Ret = NODE_DIR;\r
if(*Str == 'l')\r
*Link = YES;\r
break;\r
}\r
\r
- if((Ret != NODE_NONE) && (strlen(Fname) > 0))\r
+ // UTF-8対応\r
+// if((Ret != NODE_NONE) && (strlen(Fname) > 0))\r
+ if(!(OrgListType & LIST_RAW_NAME) && (Ret != NODE_NONE) && (strlen(Fname) > 0))\r
{\r
+ // UTF-8対応\r
+// if(CheckSpecialDirName(Fname) == YES)\r
+// Ret = NODE_NONE;\r
+// else\r
+// ChangeFnameRemote2Local(Fname, FMAX_PATH);\r
+ ChangeFnameRemote2Local(Fname, FMAX_PATH);\r
+ // UTF-8の冗長表現によるディレクトリトラバーサル対策\r
+ FixStringM(Fname, Fname);\r
+ // 0x5Cが含まれる文字列を扱えないバグ修正\r
+ if((_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "/") == 0)\r
+ || (_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "\\") == 0))\r
+ *(Fname + strlen(Fname) - 1) = NUL;\r
if(CheckSpecialDirName(Fname) == YES)\r
Ret = NODE_NONE;\r
- else\r
- ChangeFnameRemote2Local(Fname, FMAX_PATH);\r
+ // 文字コードが正しくないために長さが0になったファイル名は表示しない\r
+ if(strlen(Fname) == 0)\r
+ Ret = NODE_NONE;\r
}\r
return(Ret);\r
}\r
\r
\r
\r
+// UTF-8対応\r
+// ファイル一覧から漢字コードを推測\r
+// 優先度はUTF-8、Shift_JIS、EUC、JISの順\r
+int AnalyzeNameKanjiCode(int Num)\r
+{\r
+ char Str[FMAX_PATH+1];\r
+ char Name[FMAX_PATH+1];\r
+ LONGLONG Size;\r
+ FILETIME Time;\r
+ int Attr;\r
+ FILE *fd;\r
+ int Node;\r
+ int ListType;\r
+ char Owner[OWNER_NAME_LEN+1];\r
+ int Link;\r
+ int InfoExist;\r
+ int NameKanjiCode;\r
+ int Point;\r
+ int PointSJIS;\r
+ int PointJIS;\r
+ int PointEUC;\r
+ int PointUTF8N;\r
+ char* p;\r
+\r
+ NameKanjiCode = KANJI_AUTO;\r
+ Point = 0;\r
+ PointSJIS = 0;\r
+ PointJIS = 0;\r
+ PointEUC = 0;\r
+ PointUTF8N = 0;\r
+ MakeCacheFileName(Num, Str);\r
+ if((fd = fopen(Str, "rb")) != NULL)\r
+ {\r
+ while(GetListOneLine(Str, FMAX_PATH, fd) == FFFTP_SUCCESS)\r
+ {\r
+ if((ListType = AnalizeFileInfo(Str)) != LIST_UNKNOWN)\r
+ {\r
+ strcpy(Name, "");\r
+ Node = ResolvFileInfo(Str, ListType | LIST_RAW_NAME, Name, &Size, &Time, &Attr, Owner, &Link, &InfoExist);\r
+ p = Name;\r
+ while(*p != '\0')\r
+ {\r
+ if(*p & 0x80)\r
+ {\r
+ p = NULL;\r
+ break;\r
+ }\r
+ p++;\r
+ }\r
+ if(!p)\r
+ {\r
+ if(!CheckStringM(Name))\r
+ PointUTF8N++;\r
+ else\r
+ {\r
+ switch(CheckKanjiCode(Name, strlen(Name), KANJI_SJIS))\r
+ {\r
+ case KANJI_SJIS:\r
+ PointSJIS++;\r
+ break;\r
+ case KANJI_JIS:\r
+ PointJIS++;\r
+ break;\r
+ case KANJI_EUC:\r
+ PointEUC++;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ fclose(fd);\r
+ }\r
+ if(PointJIS >= Point)\r
+ {\r
+ NameKanjiCode = KANJI_JIS;\r
+ Point = PointJIS;\r
+ }\r
+ if(PointEUC >= Point)\r
+ {\r
+ NameKanjiCode = KANJI_EUC;\r
+ Point = PointEUC;\r
+ }\r
+ if(PointSJIS >= Point)\r
+ {\r
+ NameKanjiCode = KANJI_SJIS;\r
+ Point = PointSJIS;\r
+ }\r
+ if(PointUTF8N >= Point)\r
+ {\r
+ NameKanjiCode = KANJI_UTF8N;\r
+ Point = PointUTF8N;\r
+ }\r
+ return NameKanjiCode;\r
+}\r
+\r