/ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
/============================================================================*/\r
\r
-#define _WIN32_WINNT 0x400\r
+// UTF-8対応\r
+//#define _WIN32_WINNT 0x400\r
\r
#define STRICT\r
#include <windows.h>\r
static int CheckYYYYMMDDformat(char *Str, char Sym);\r
static int ResolvFileInfo(char *Str, int ListType, char *Fname, LONGLONG *Size, FILETIME *Time, int *Attr, char *Owner, int *Link, int *InfoExist);\r
static int FindField(char *Str, char *Buf, int Num, int ToLast);\r
+// MLSD対応\r
+static int FindField2(char *Str, char *Buf, char Separator, int Num, int ToLast);\r
static void GetMonth(char *Str, WORD *Month, WORD *Day);\r
static int GetYearMonthDay(char *Str, WORD *Year, WORD *Month, WORD *Day);\r
static int GetHourAndMinute(char *Str, WORD *Hour, WORD *Minute);\r
PathDir = LocDir;\r
\r
FileListBase = NULL;\r
- MakeSelectedFileList(WIN_LOCAL, YES, NO, &FileListBase, &CancelFlg); \r
+ // ローカル側からアプリケーションにD&Dできないバグ修正\r
+// MakeSelectedFileList(WIN_LOCAL, YES, NO, &FileListBase, &CancelFlg); \r
+ MakeSelectedFileList(WIN_LOCAL, NO, NO, &FileListBase, &CancelFlg); \r
+ FileListBaseNoExpand = FileListBase;\r
\r
} else if (hWndDragStart == hWndListRemote) {\r
GetCursorPos(&Point);\r
}\r
}\r
\r
+ // MLSD対応\r
+ if(Ret == LIST_UNKNOWN)\r
+ {\r
+ if(FindField2(Str, Tmp, ';', 1, NO) == FFFTP_SUCCESS && FindField2(Str, Tmp, '=', 1, NO) == FFFTP_SUCCESS)\r
+ {\r
+ Ret = LIST_MLSD;\r
+ }\r
+ }\r
}\r
\r
DoPrintf("ListType=%d", Ret);\r
\r
/* 年がない */\r
/* 現在の日付から推定 */\r
- if((sTimeNow.wMonth == 12) && (sTime.wMonth == 1))\r
- sTime.wYear++;\r
- else if(sTimeNow.wMonth+1 == sTime.wMonth)\r
+ // 恐らくホストとローカルの時刻が異なる場合の対処のようだがとりあえず無効にする\r
+// if((sTimeNow.wMonth == 12) && (sTime.wMonth == 1))\r
+// sTime.wYear++;\r
+// else if(sTimeNow.wMonth+1 == sTime.wMonth)\r
+ if(sTimeNow.wMonth+1 == sTime.wMonth)\r
/* nothing */;\r
else if(sTimeNow.wMonth < sTime.wMonth)\r
sTime.wYear--;\r
Ret = NODE_NONE;\r
}\r
break;\r
+\r
+ // MLSD対応\r
+ case LIST_MLSD:\r
+ {\r
+ int i = 0;\r
+ char Tmp[FMAX_PATH + 1];\r
+ char Name[FMAX_PATH + 1];\r
+ char Value[FMAX_PATH + 1];\r
+ while(FindField2(Str, Tmp, ';', i, NO) == FFFTP_SUCCESS)\r
+ {\r
+ if(i >= 1 && strncmp(Tmp, " ", 1) == 0)\r
+ strcpy(Fname, strstr(Str, "; ") + 2);\r
+ else if(FindField2(Tmp, Name, '=', 0, NO) == FFFTP_SUCCESS && FindField2(Tmp, Value, '=', 1, NO) == FFFTP_SUCCESS)\r
+ {\r
+ if(_stricmp(Name, "type") == 0)\r
+ {\r
+ if(_stricmp(Value, "dir") == 0)\r
+ Ret = NODE_DIR;\r
+ else if(_stricmp(Value, "file") == 0)\r
+ Ret = NODE_FILE;\r
+ }\r
+ else if(_stricmp(Name, "size") == 0)\r
+ {\r
+ *Size = _atoi64(Value);\r
+ *InfoExist |= FINFO_SIZE;\r
+ }\r
+ else if(_stricmp(Name, "modify") == 0)\r
+ {\r
+ sTime.wYear = atoi_n(Value, 4);\r
+ sTime.wMonth = atoi_n(Value + 4, 2);\r
+ sTime.wDay = atoi_n(Value + 6, 2);\r
+ sTime.wHour = atoi_n(Value + 8, 2);\r
+ sTime.wMinute = atoi_n(Value + 10, 2);\r
+ sTime.wSecond = atoi_n(Value + 12, 2);\r
+ SystemTimeToFileTime(&sTime, Time);\r
+// SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());\r
+ *InfoExist |= FINFO_DATE | FINFO_TIME;\r
+ }\r
+ else if(_stricmp(Name, "UNIX.mode") == 0)\r
+ {\r
+ *Attr = strtol(Value, NULL, 16);\r
+ *InfoExist |= FINFO_ATTR;\r
+ }\r
+ else if(_stricmp(Name, "UNIX.owner") == 0)\r
+ strcpy(Owner, Value);\r
+ }\r
+ i++;\r
+ }\r
+ }\r
+ break;\r
}\r
\r
if((Ret != NODE_NONE) && (strlen(Fname) > 0))\r
}\r
\r
\r
+// MLSD対応\r
+static int FindField2(char *Str, char *Buf, char Separator, int Num, int ToLast)\r
+{\r
+ char *Pos;\r
+ int Sts;\r
+\r
+ Sts = FFFTP_FAIL;\r
+ *Buf = NUL;\r
+ if(Num >= 0)\r
+ {\r
+ while(*Str == Separator)\r
+ Str++;\r
+\r
+ for(; Num > 0; Num--)\r
+ {\r
+ if((Str = strchr(Str, Separator)) != NULL)\r
+ {\r
+ while(*Str == Separator)\r
+ {\r
+ if(*Str == NUL)\r
+ {\r
+ Str = NULL;\r
+ break;\r
+ }\r
+ Str++;\r
+ }\r
+ }\r
+ else\r
+ break;\r
+ }\r
+ }\r
+\r
+ if(Str != NULL)\r
+ {\r
+ if((ToLast == YES) || ((Pos = strchr(Str, Separator)) == NULL))\r
+ strcpy(Buf, Str);\r
+ else\r
+ {\r
+ strncpy(Buf, Str, Pos - Str);\r
+ *(Buf + (Pos - Str)) = NUL;\r
+ }\r
+ Sts = FFFTP_SUCCESS;\r
+ }\r
+ return(Sts);\r
+}\r
+\r
+\r
/*----- 文字列から月を求める --------------------------------------------------\r
*\r
* Parameter\r