Fix bugs of UTF-8 to UTF-16 API bridge.
Fix bugs of simultaneous connection.
Add support for additional features of hosts.
Fix inconsistent WINVER, _WIN32_WINNT and _WIN32_IE.
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="Resource"
- PreprocessorDefinitions="WIN32,_DEBUG,_WINDOWS,_WIN32_IE=0x300,_CRT_SECURE_NO_WARNINGS"
+ PreprocessorDefinitions="WIN32,_DEBUG,_WINDOWS,WINVER=0x0500,_WIN32_WINNT=0x0500,_WIN32_IE=0x0400,_CRT_SECURE_NO_WARNINGS"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\Debug\FFFTP.pch"
AssemblerListingLocation=".\Debug\"
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
- AdditionalDependencies="wsock32.lib comctl32.lib winmm.lib htmlhelp.lib"
+ AdditionalDependencies="comctl32.lib htmlhelp.lib rasapi32.lib winmm.lib wsock32.lib"
OutputFile=".\Debug\FFFTP.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="Resource"
- PreprocessorDefinitions="WIN32,NDEBUG,_WINDOWS,_WIN32_IE=0x300,_CRT_SECURE_NO_WARNINGS"
+ PreprocessorDefinitions="WIN32,NDEBUG,_WINDOWS,WINVER=0x0500,_WIN32_WINNT=0x0500,_WIN32_IE=0x0400,_CRT_SECURE_NO_WARNINGS"
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
- AdditionalDependencies="wsock32.lib comctl32.lib winmm.lib RASAPI32.LIB htmlhelp.lib"
+ AdditionalDependencies="comctl32.lib htmlhelp.lib rasapi32.lib winmm.lib wsock32.lib"
OutputFile=".\Release\FFFTP.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
Name="VCCLCompilerTool"\r
Optimization="0"\r
AdditionalIncludeDirectories="Resource"\r
- PreprocessorDefinitions="WIN32,_DEBUG,_WINDOWS,_WIN32_IE=0x300,_CRT_SECURE_NO_WARNINGS"\r
+ PreprocessorDefinitions="WIN32,_DEBUG,_WINDOWS,WINVER=0x0500,_WIN32_WINNT=0x0500,_WIN32_IE=0x0400,_CRT_SECURE_NO_WARNINGS"\r
RuntimeLibrary="1"\r
PrecompiledHeaderFile=".\Debug\FFFTP.pch"\r
AssemblerListingLocation=".\Debug\"\r
<Tool\r
Name="VCLinkerTool"\r
AdditionalOptions="/MACHINE:I386"\r
- AdditionalDependencies="wsock32.lib comctl32.lib winmm.lib htmlhelp.lib"\r
+ AdditionalDependencies="comctl32.lib htmlhelp.lib rasapi32.lib winmm.lib wsock32.lib"\r
OutputFile=".\Debug\FFFTP.exe"\r
LinkIncremental="2"\r
SuppressStartupBanner="true"\r
Name="VCCLCompilerTool"\r
InlineFunctionExpansion="1"\r
AdditionalIncludeDirectories="Resource"\r
- PreprocessorDefinitions="WIN32,NDEBUG,_WINDOWS,_WIN32_IE=0x300,_CRT_SECURE_NO_WARNINGS"\r
+ PreprocessorDefinitions="WIN32,NDEBUG,_WINDOWS,WINVER=0x0500,_WIN32_WINNT=0x0500,_WIN32_IE=0x0400,_CRT_SECURE_NO_WARNINGS"\r
StringPooling="true"\r
RuntimeLibrary="0"\r
EnableFunctionLevelLinking="true"\r
<Tool\r
Name="VCLinkerTool"\r
AdditionalOptions="/MACHINE:I386"\r
- AdditionalDependencies="wsock32.lib comctl32.lib winmm.lib RASAPI32.LIB htmlhelp.lib"\r
+ AdditionalDependencies="comctl32.lib htmlhelp.lib rasapi32.lib winmm.lib wsock32.lib"\r
OutputFile=".\Release\FFFTP.exe"\r
LinkIncremental="1"\r
SuppressStartupBanner="true"\r
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="Resource_eng"
- PreprocessorDefinitions="WIN32,_DEBUG,_WINDOWS,_WIN32_IE=0x300,_CRT_SECURE_NO_WARNINGS,ENGLISH"
+ PreprocessorDefinitions="WIN32,_DEBUG,_WINDOWS,WINVER=0x0500,_WIN32_WINNT=0x0500,_WIN32_IE=0x0400,_CRT_SECURE_NO_WARNINGS,ENGLISH"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\FFFTP_Eng_Debug\FFFTP_English.pch"
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
- AdditionalDependencies="wsock32.lib comctl32.lib winmm.lib htmlhelp.lib"
+ AdditionalDependencies="comctl32.lib htmlhelp.lib rasapi32.lib winmm.lib wsock32.lib"
OutputFile=".\FFFTP_Eng_Debug\FFFTP.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="Resource_eng"
- PreprocessorDefinitions="WIN32,NDEBUG,_WINDOWS,_WIN32_IE=0x300,_CRT_SECURE_NO_WARNINGS,ENGLISH"
+ PreprocessorDefinitions="WIN32,NDEBUG,_WINDOWS,WINVER=0x0500,_WIN32_WINNT=0x0500,_WIN32_IE=0x0400,_CRT_SECURE_NO_WARNINGS,ENGLISH"
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
- AdditionalDependencies="wsock32.lib comctl32.lib winmm.lib htmlhelp.lib"
+ AdditionalDependencies="comctl32.lib htmlhelp.lib rasapi32.lib winmm.lib wsock32.lib"
OutputFile=".\FFFTP_Eng_Release\FFFTP.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
Name="VCCLCompilerTool"\r
Optimization="0"\r
AdditionalIncludeDirectories="Resource_eng"\r
- PreprocessorDefinitions="WIN32,_DEBUG,_WINDOWS,_WIN32_IE=0x300,_CRT_SECURE_NO_WARNINGS,ENGLISH"\r
+ PreprocessorDefinitions="WIN32,_DEBUG,_WINDOWS,WINVER=0x0500,_WIN32_WINNT=0x0500,_WIN32_IE=0x0400,_CRT_SECURE_NO_WARNINGS,ENGLISH"\r
BasicRuntimeChecks="3"\r
RuntimeLibrary="1"\r
PrecompiledHeaderFile=".\FFFTP_Eng_Debug\FFFTP_English.pch"\r
<Tool\r
Name="VCLinkerTool"\r
AdditionalOptions="/MACHINE:I386"\r
- AdditionalDependencies="wsock32.lib comctl32.lib winmm.lib htmlhelp.lib"\r
+ AdditionalDependencies="comctl32.lib htmlhelp.lib rasapi32.lib winmm.lib wsock32.lib"\r
OutputFile=".\FFFTP_Eng_Debug\FFFTP.exe"\r
LinkIncremental="2"\r
SuppressStartupBanner="true"\r
Name="VCCLCompilerTool"\r
InlineFunctionExpansion="1"\r
AdditionalIncludeDirectories="Resource_eng"\r
- PreprocessorDefinitions="WIN32,NDEBUG,_WINDOWS,_WIN32_IE=0x300,_CRT_SECURE_NO_WARNINGS,ENGLISH"\r
+ PreprocessorDefinitions="WIN32,NDEBUG,_WINDOWS,WINVER=0x0500,_WIN32_WINNT=0x0500,_WIN32_IE=0x0400,_CRT_SECURE_NO_WARNINGS,ENGLISH"\r
StringPooling="true"\r
RuntimeLibrary="0"\r
EnableFunctionLevelLinking="true"\r
<Tool\r
Name="VCLinkerTool"\r
AdditionalOptions="/MACHINE:I386"\r
- AdditionalDependencies="wsock32.lib comctl32.lib winmm.lib htmlhelp.lib"\r
+ AdditionalDependencies="comctl32.lib htmlhelp.lib rasapi32.lib winmm.lib wsock32.lib"\r
OutputFile=".\FFFTP_Eng_Release\FFFTP.exe"\r
LinkIncremental="1"\r
SuppressStartupBanner="true"\r
/ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
/============================================================================*/\r
\r
-#define WINVER 0x400\r
+// UTF-8対応\r
+//#define WINVER 0x400\r
\r
#define STRICT\r
#include <windows.h>\r
#define CRYPT_FTPIS 2\r
#define CRYPT_SFTP 3\r
\r
+// FEAT対応\r
+// UTF-8対応\r
+#define FEATURE_UTF8 0x00000001\r
+\r
\r
/*=================================================\r
* ストラクチャ\r
int UseSFTP; /* SFTPで接続する (YES/NO) */\r
// 同時接続対応\r
int MaxThreadCount; /* 同時接続数 */\r
+ // FEAT対応\r
+ int Feature; /* 利用可能な機能のフラグ (FEATURE_xxx) */\r
} HOSTDATA;\r
\r
\r
int AskUseSFTP(void);\r
// 同時接続対応\r
int AskMaxThreadCount(void);\r
+// FEAT対応\r
+int AskHostFeature(void);\r
\r
/*===== cache.c =====*/\r
\r
// 同時接続対応\r
int ReConnectTrnSkt(SOCKET *Skt)\r
{\r
- char Path[FMAX_PATH+1];\r
+// char Path[FMAX_PATH+1];\r
int Sts;\r
\r
Sts = FFFTP_FAIL;\r
int Sts;\r
\r
Sts = YES;\r
- if(CmdCtrlSocket == TrnCtrlSocket)\r
- Sts = NO;\r
+// if(CmdCtrlSocket == TrnCtrlSocket)\r
+// Sts = NO;\r
\r
return(Sts);\r
}\r
#endif\r
TryConnect = NO;\r
\r
+ // FEAT対応\r
+ // ホストの機能を確認\r
+ if(ContSock != INVALID_SOCKET)\r
+ {\r
+ if((Sts = command(ContSock, Reply, &CancelFlg, "FEAT")) == 211)\r
+ {\r
+ // 改行文字はReadReplyMessageで消去されるため区切り文字に空白を使用\r
+ // UTF-8対応\r
+ if(strstr(Reply, " UTF8 "))\r
+ CurHost.Feature |= FEATURE_UTF8;\r
+ }\r
+ // UTF-8対応\r
+ if(CurHost.NameKanjiCode == KANJI_AUTO && (CurHost.Feature & FEATURE_UTF8))\r
+ {\r
+ if((Sts = command(ContSock, Reply, &CancelFlg, "OPTS UTF8 ON")) == 200)\r
+ {\r
+ }\r
+ }\r
+ }\r
+\r
return(ContSock);\r
}\r
\r
return(CurHost.MaxThreadCount);\r
}\r
\r
+// FEAT対応\r
+int AskHostFeature(void)\r
+{\r
+ return(CurHost.Feature);\r
+}\r
+\r
/ 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
}\r
}\r
}\r
-\r
}\r
\r
DoPrintf("ListType=%d", Ret);\r
\r
static int TransFiles = 0; /* 転送待ちファイル数 */\r
static TRANSPACKET *TransPacketBase = NULL; /* 転送ファイルリスト */\r
+// 同時接続対応\r
+static TRANSPACKET *NextTransPacketBase = NULL;\r
\r
// 同時接続対応\r
//static int Canceled; /* 中止フラグ YES/NO */\r
PostMessage(GetMainHwnd(), WM_CHANGE_COND, 0, 0);\r
}\r
}\r
+ // 同時接続対応\r
+ if(NextTransPacketBase == NULL)\r
+ NextTransPacketBase = TransPacketBase;\r
ReleaseMutex(hListAccMutex);\r
\r
return;\r
Pos = Pos->Next;\r
Pos->Next = Pkt;\r
}\r
+ // 同時接続対応\r
+ if(NextTransPacketBase == NULL)\r
+ NextTransPacketBase = TransPacketBase;\r
\r
while(Pkt != NULL)\r
{\r
if(strcmp(New->Cmd, "BACKCUR") == 0)\r
{\r
if(NotDel != NULL)\r
- free(NotDel);\r
+ // 同時接続対応\r
+// free(NotDel);\r
+ strcpy(NotDel->Cmd, "");\r
NotDel = New;\r
New = New->Next;\r
- NotDel->Next = NULL;\r
+ // 同時接続対応\r
+// NotDel->Next = NULL;\r
}\r
else\r
{\r
Next = New->Next;\r
- free(New);\r
+ // 同時接続対応\r
+// free(New);\r
+ strcpy(New->Cmd, "");\r
New = Next;\r
}\r
}\r
TransPacketBase = NotDel;\r
+ // 同時接続対応\r
+ NextTransPacketBase = TransPacketBase;\r
TransFiles = 0;\r
PostMessage(GetMainHwnd(), WM_CHANGE_COND, 0, 0);\r
ReleaseMutex(hListAccMutex);\r
char Tmp[FMAX_PATH+1];\r
int CwdSts;\r
int GoExit;\r
- int Down;\r
- int Up;\r
+// int Down;\r
+// int Up;\r
+ static int Down;\r
+ static int Up;\r
int DelNotify;\r
int ThreadCount;\r
SOCKET CmdSkt;\r
// Canceled = NO;\r
Canceled[ThreadCount] = NO;\r
\r
+ while(TransPacketBase != NULL && strcmp(TransPacketBase->Cmd, "") == 0)\r
+ {\r
+ Pos = TransPacketBase;\r
+ TransPacketBase = TransPacketBase->Next;\r
+ free(Pos);\r
+ }\r
NewCmdSkt = AskCmdCtrlSkt();\r
if(TransPacketBase && NewCmdSkt != INVALID_SOCKET && ThreadCount < AskMaxThreadCount())\r
{\r
}\r
CmdSkt = NewCmdSkt;\r
// if(TransPacketBase != NULL)\r
- if(TrnSkt != INVALID_SOCKET && TransPacketBase != NULL)\r
+ if(TrnSkt != INVALID_SOCKET && NextTransPacketBase != NULL)\r
{\r
- Pos = TransPacketBase;\r
- TransPacketBase = TransPacketBase->Next;\r
+ Pos = NextTransPacketBase;\r
+ NextTransPacketBase = NextTransPacketBase->Next;\r
// ディレクトリ操作は非同期で行わない\r
// ReleaseMutex(hListAccMutex);\r
if(hWndTrans == NULL)\r
for(i = 0; i < MAX_DATA_CONNECTION; i++)\r
Canceled[i] = YES;\r
EraseTransFileList();\r
+ Pos = NULL;\r
}\r
else\r
{\r
}\r
if(hWndTrans != NULL)\r
SendMessage(hWndTrans, WM_SET_PACKET, 0, 0);\r
- free(Pos);\r
+ if(Pos != NULL)\r
+ strcpy(Pos->Cmd, "");\r
}\r
// else\r
else if(TransPacketBase == NULL)\r
DestroyWindow(hWndTrans);\r
hWndTrans = NULL;\r
\r
- if(GoExit == YES)\r
- {\r
- SoundPlay(SND_TRANS);\r
-\r
- if(AskAutoExit() == NO)\r
- {\r
- if(Down == YES)\r
- PostMessage(GetMainHwnd(), WM_REFRESH_LOCAL_FLG, 0, 0);\r
- if(Up == YES)\r
- PostMessage(GetMainHwnd(), WM_REFRESH_REMOTE_FLG, 0, 0);\r
- }\r
- Down = NO;\r
- Up = NO;\r
- }\r
+// if(GoExit == YES)\r
+// {\r
+// SoundPlay(SND_TRANS);\r
+//\r
+// if(AskAutoExit() == NO)\r
+// {\r
+// if(Down == YES)\r
+// PostMessage(GetMainHwnd(), WM_REFRESH_LOCAL_FLG, 0, 0);\r
+// if(Up == YES)\r
+// PostMessage(GetMainHwnd(), WM_REFRESH_REMOTE_FLG, 0, 0);\r
+// }\r
+// Down = NO;\r
+// Up = NO;\r
+// }\r
}\r
}\r
BackgrndMessageProc();\r
\r
if(GoExit == YES)\r
{\r
+ SoundPlay(SND_TRANS);\r
+ if(AskAutoExit() == NO)\r
+ {\r
+ if(Down == YES)\r
+ PostMessage(GetMainHwnd(), WM_REFRESH_LOCAL_FLG, 0, 0);\r
+ if(Up == YES)\r
+ PostMessage(GetMainHwnd(), WM_REFRESH_REMOTE_FLG, 0, 0);\r
+ }\r
+ Down = NO;\r
+ Up = NO;\r
PostMessage(GetMainHwnd(), WM_COMMAND, MAKEWPARAM(MENU_AUTO_EXIT, 0), 0);\r
GoExit = NO;\r
}\r
Set->UseSFTP = YES;\r
// 同時接続対応\r
Set->MaxThreadCount = 1;\r
+ Set->Feature = 0;\r
return;\r
}\r
\r
PROPSHEETPAGE psp[7];\r
PROPSHEETHEADER psh;\r
\r
+ // 変数が未初期化のバグ修正\r
+ memset(&psp, 0, sizeof(psp));\r
+ memset(&psh, 0, sizeof(psh));\r
+\r
psp[0].dwSize = sizeof(PROPSHEETPAGE);\r
psp[0].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
psp[0].hInstance = GetFtpInst();\r
\r
InitCommonControls();\r
\r
+ // FTPS対応\r
#ifdef USE_OPENSSL\r
LoadOpenSSL();\r
#endif\r
Ret = Msg.wParam;\r
}\r
UnregisterClass(FtpClassStr, hInstFtp);\r
+ // FTPS対応\r
#ifdef USE_OPENSSL\r
FreeOpenSSL();\r
#endif\r
-// mbswrapper.cpp
+// mbswrapper.c
// Copyright (C) 2011 Suguru Kawamoto
// マルチバイト文字ワイド文字APIラッパー
// マルチバイト文字はUTF-8、ワイド文字はUTF-16であるものとする
#define UNICODE
#define _UNICODE
-#define _WIN32_WINNT 0x0600
-#undef _WIN32_IE
-#define _WIN32_IE 0x0400
#include <tchar.h>
#include <direct.h>
return WideCharToMultiByte(CP_UTF8, 0, pSrc, count, NULL, 0, NULL, NULL);
}
+// Shift_JIS文字列からワイド文字列へ変換
+int AtoW(LPWSTR pDst, int size, LPCSTR pSrc, int count)
+{
+ if(pSrc < (LPCSTR)0x00010000 || pSrc == (LPCSTR)~0)
+ return 0;
+ if(pDst)
+ return MultiByteToWideChar(CP_ACP, 0, pSrc, count, pDst, size);
+ return MultiByteToWideChar(CP_ACP, 0, pSrc, count, NULL, 0);
+}
+
// ワイド文字列からShift_JIS文字列へ変換
int WtoA(LPSTR pDst, int size, LPCWSTR pSrc, int count)
{
return i;
}
+// NULL区切りShift_JIS文字列からワイド文字列へ変換
+int AtoWMultiString(LPWSTR pDst, int size, LPCSTR pSrc)
+{
+ int i;
+ if(pSrc < (LPCSTR)0x00010000 || pSrc == (LPCSTR)~0)
+ return 0;
+ if(!pDst)
+ return GetMultiStringLengthA(pSrc);
+ i = 0;
+ while(*pSrc != '\0')
+ {
+ i += MultiByteToWideChar(CP_ACP, 0, pSrc, -1, pDst + i, size - i - 1);
+ pSrc += strlen(pSrc) + 1;
+ }
+ pDst[i] = L'\0';
+ return i;
+}
+
// NULL区切りワイド文字列からShift_JIS文字列へ変換
int WtoAMultiString(LPSTR pDst, int size, LPCWSTR pSrc)
{
}
// メモリを確保してマルチバイト文字列からワイド文字列へ変換
+// リソースIDならば元の値を返す
wchar_t* DuplicateMtoW(LPCSTR lpString, int c)
{
wchar_t* p;
}
// 指定したサイズのメモリを確保してマルチバイト文字列からワイド文字列へ変換
+// リソースIDならば元の値を返す
wchar_t* DuplicateMtoWBuffer(LPCSTR lpString, int c, int size)
{
wchar_t* p;
}
// メモリを確保してNULL区切りマルチバイト文字列からワイド文字列へ変換
+// リソースIDならば元の値を返す
wchar_t* DuplicateMtoWMultiString(LPCSTR lpString)
{
int count;
}
// 指定したサイズのメモリを確保してNULL区切りマルチバイト文字列からワイド文字列へ変換
+// リソースIDならば元の値を返す
wchar_t* DuplicateMtoWMultiStringBuffer(LPCSTR lpString, int size)
{
int count;
}
// メモリを確保してワイド文字列からマルチバイト文字列へ変換
+// リソースIDならば元の値を返す
char* DuplicateWtoM(LPCWSTR lpString, int c)
{
char* p;
return p;
}
+// メモリを確保してShift_JIS文字列からワイド文字列へ変換
+// リソースIDならば元の値を返す
+wchar_t* DuplicateAtoW(LPCSTR lpString, int c)
+{
+ wchar_t* p;
+ int i;
+ if(lpString < (LPCSTR)0x00010000 || lpString == (LPCSTR)~0)
+ return (wchar_t*)lpString;
+ if(c < 0)
+ c = strlen(lpString);
+ p = AllocateStringW(AtoW(NULL, 0, lpString, c) + 1);
+ if(p)
+ {
+ i = AtoW(p, 65535, lpString, c);
+ p[i] = L'\0';
+ }
+ return p;
+}
+
// メモリを確保してワイド文字列からShift_JIS文字列へ変換
+// リソースIDならば元の値を返す
char* DuplicateWtoA(LPCWSTR lpString, int c)
{
char* p;
}
// 文字列用に確保したメモリを開放
+// リソースIDならば何もしない
void FreeDuplicatedString(void* p)
{
if(p < (void*)0x00010000 || p == (void*)~0)
// マルチバイト文字バッファ pm%d
// 引数バッファ a%d
+#pragma warning(disable:4102)
#define START_ROUTINE do{
#define END_ROUTINE }while(0);end_of_routine:
#define QUIT_ROUTINE goto end_of_routine;
+int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
+{
+ int r = 0;
+ char* pm0 = NULL;
+START_ROUTINE
+ pm0 = DuplicateWtoM(lpCmdLine, -1);
+ r = WinMainM(hInstance, hPrevInstance, pm0, nCmdShow);
+END_ROUTINE
+ FreeDuplicatedString(pm0);
+ return r;
+}
+
+HMODULE LoadLibraryM(LPCSTR lpLibFileName)
+{
+ HMODULE r = NULL;
+ wchar_t* pw0 = NULL;
+START_ROUTINE
+ pw0 = DuplicateMtoW(lpLibFileName, -1);
+ r = LoadLibraryW(pw0);
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ return r;
+}
+
HANDLE CreateFileM(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile)
{
HANDLE r = INVALID_HANDLE_VALUE;
return r;
}
+LPSTR GetCommandLineM()
+{
+ LPSTR r = 0;
+ static char* pm0 = NULL;
+START_ROUTINE
+ if(!pm0)
+ pm0 = DuplicateWtoM(GetCommandLineW(), -1);
+ r = pm0;
+END_ROUTINE
+ return r;
+}
+
DWORD GetCurrentDirectoryM(DWORD nBufferLength, LPSTR lpBuffer)
{
DWORD r = 0;
wchar_t* pw0 = NULL;
START_ROUTINE
+ // TODO: バッファが不十分な場合に必要なサイズを返す
pw0 = AllocateStringW(nBufferLength * 4);
GetCurrentDirectoryW(nBufferLength * 4, pw0);
WtoM(lpBuffer, nBufferLength, pw0, -1);
return r;
}
-BOOL SetDllDirectoryM(LPCSTR lpPathName)
-{
- BOOL r = FALSE;
- wchar_t* pw0 = NULL;
-START_ROUTINE
- pw0 = DuplicateMtoW(lpPathName, -1);
- r = SetDllDirectoryW(pw0);
-END_ROUTINE
- FreeDuplicatedString(pw0);
- return r;
-}
-
DWORD GetTempPathM(DWORD nBufferLength, LPSTR lpBuffer)
{
DWORD r = 0;
a0.hIcon = v0->hIcon;
a0.pszCaption = DuplicateMtoW(v0->pszCaption, -1);
a0.nPages = v0->nPages;
- a0.pStartPage = DuplicateMtoW(v0->pStartPage, -1);
- if(v0->ppsp && (pwPage = (PROPSHEETPAGEW*)malloc(sizeof(PROPSHEETPAGEW) * v0->nPages)))
+ if(v0->dwFlags & PSH_USEPSTARTPAGE)
+ a0.pStartPage = DuplicateMtoW(v0->pStartPage, -1);
+ else
+ a0.nStartPage = v0->nStartPage;
+ if(v0->dwFlags & PSH_PROPSHEETPAGE)
{
- for(i = 0; i < v0->nPages; i++)
+ if(v0->ppsp && (pwPage = (PROPSHEETPAGEW*)malloc(sizeof(PROPSHEETPAGEW) * v0->nPages)))
{
- pwPage[i].dwSize = sizeof(PROPSHEETPAGEW);
- pwPage[i].dwFlags = v0->ppsp[i].dwFlags;
- pwPage[i].hInstance = v0->ppsp[i].hInstance;
- pwPage[i].pszTemplate = DuplicateMtoW(v0->ppsp[i].pszTemplate, -1);
- if(v0->ppsp[i].dwFlags & PSP_USEICONID)
- pwPage[i].pszIcon = DuplicateMtoW(v0->ppsp[i].pszIcon, -1);
- else
- pwPage[i].hIcon = v0->ppsp[i].hIcon;
- if(v0->ppsp[i].dwFlags & PSP_USETITLE)
- pwPage[i].pszTitle = DuplicateMtoW(v0->ppsp[i].pszTitle, -1);
- pwPage[i].pfnDlgProc = v0->ppsp[i].pfnDlgProc;
- pwPage[i].lParam = v0->ppsp[i].lParam;
- // TODO: pfnCallback
- pwPage[i].pfnCallback = v0->ppsp[i].pfnCallback;
- pwPage[i].pcRefParent = v0->ppsp[i].pcRefParent;
-// pwPage[i].pszHeaderTitle = DuplicateMtoW(v0->ppsp[i].pszHeaderTitle, -1);
-// pwPage[i].pszHeaderSubTitle = DuplicateMtoW(v0->ppsp[i].pszHeaderSubTitle, -1);
- pwPage[i].hActCtx = v0->ppsp[i].hActCtx;
-// pwPage[i].pszbmHeader = DuplicateMtoW(v0->ppsp[i].pszbmHeader, -1);
+ for(i = 0; i < v0->nPages; i++)
+ {
+ pwPage[i].dwSize = sizeof(PROPSHEETPAGEW);
+ pwPage[i].dwFlags = v0->ppsp[i].dwFlags;
+ pwPage[i].hInstance = v0->ppsp[i].hInstance;
+ if(v0->ppsp[i].dwFlags & PSP_DLGINDIRECT)
+ pwPage[i].pResource = v0->ppsp[i].pResource;
+ else
+ pwPage[i].pszTemplate = DuplicateMtoW(v0->ppsp[i].pszTemplate, -1);
+ if(v0->ppsp[i].dwFlags & PSP_USEICONID)
+ pwPage[i].pszIcon = DuplicateMtoW(v0->ppsp[i].pszIcon, -1);
+ else
+ pwPage[i].hIcon = v0->ppsp[i].hIcon;
+ if(v0->ppsp[i].dwFlags & PSP_USETITLE)
+ pwPage[i].pszTitle = DuplicateMtoW(v0->ppsp[i].pszTitle, -1);
+ pwPage[i].pfnDlgProc = v0->ppsp[i].pfnDlgProc;
+ pwPage[i].lParam = v0->ppsp[i].lParam;
+ // TODO: pfnCallback
+ pwPage[i].pfnCallback = (LPFNPSPCALLBACKW)v0->ppsp[i].pfnCallback;
+ pwPage[i].pcRefParent = v0->ppsp[i].pcRefParent;
+ if(v0->ppsp[i].dwFlags & PSP_USEHEADERTITLE)
+ pwPage[i].pszHeaderTitle = DuplicateMtoW(v0->ppsp[i].pszHeaderTitle, -1);
+ if(v0->ppsp[i].dwFlags & PSP_USEHEADERSUBTITLE)
+ pwPage[i].pszHeaderSubTitle = DuplicateMtoW(v0->ppsp[i].pszHeaderSubTitle, -1);
+ }
}
+ else
+ pwPage = NULL;
+ a0.ppsp = pwPage;
}
else
- pwPage = NULL;
- a0.ppsp = pwPage;
+ a0.phpage = v0->phpage;
a0.pfnCallback = v0->pfnCallback;
+ if(v0->dwFlags & PSH_USEHBMWATERMARK)
+ a0.hbmWatermark = v0->hbmWatermark;
+ else
+ a0.pszbmWatermark = DuplicateMtoW(v0->pszbmWatermark, -1);
r = PropertySheetW(&a0);
if(a0.dwFlags & PSH_USEICONID)
- FreeDuplicatedString(a0.pszIcon);
- FreeDuplicatedString(a0.pszCaption);
- FreeDuplicatedString(a0.pStartPage);
- if(pwPage)
+ FreeDuplicatedString((void*)a0.pszIcon);
+ FreeDuplicatedString((void*)a0.pszCaption);
+ if(v0->dwFlags & PSH_USEPSTARTPAGE)
+ FreeDuplicatedString((void*)a0.pStartPage);
+ if(v0->dwFlags & PSH_PROPSHEETPAGE)
{
- for(i = 0; i < v0->nPages; i++)
+ if(pwPage)
{
- FreeDuplicatedString(pwPage[i].pszTemplate);
- if(pwPage[i].dwFlags & PSP_USEICONID)
- FreeDuplicatedString(pwPage[i].pszIcon);
- if(pwPage[i].dwFlags & PSP_USETITLE)
- FreeDuplicatedString(pwPage[i].pszTitle);
-// FreeDuplicatedString(pwPage[i].pszHeaderTitle);
-// FreeDuplicatedString(pwPage[i].pszHeaderSubTitle);
-// FreeDuplicatedString(pwPage[i].pszbmHeader);
+ for(i = 0; i < v0->nPages; i++)
+ {
+ if(!(v0->ppsp[i].dwFlags & PSP_DLGINDIRECT))
+ FreeDuplicatedString((void*)pwPage[i].pszTemplate);
+ if(v0->ppsp[i].dwFlags & PSP_USEICONID)
+ FreeDuplicatedString((void*)pwPage[i].pszIcon);
+ if(v0->ppsp[i].dwFlags & PSP_USETITLE)
+ FreeDuplicatedString((void*)pwPage[i].pszTitle);
+ if(v0->ppsp[i].dwFlags & PSP_USEHEADERTITLE)
+ FreeDuplicatedString((void*)pwPage[i].pszHeaderTitle);
+ if(v0->ppsp[i].dwFlags & PSP_USEHEADERSUBTITLE)
+ FreeDuplicatedString((void*)pwPage[i].pszHeaderSubTitle);
+ }
+ free(pwPage);
}
- free(pwPage);
}
+ if(!(v0->dwFlags & PSH_USEHBMWATERMARK))
+ FreeDuplicatedString((void*)a0.pszbmWatermark);
END_ROUTINE
return r;
}
wFileOp.fFlags = lpFileOp->fFlags;
wFileOp.fAnyOperationsAborted = lpFileOp->fAnyOperationsAborted;
wFileOp.hNameMappings = lpFileOp->hNameMappings;
- pw2 = DuplicateMtoW(lpFileOp->lpszProgressTitle, -1);
+ if(lpFileOp->fFlags & FOF_SIMPLEPROGRESS)
+ pw2 = DuplicateMtoW(lpFileOp->lpszProgressTitle, -1);
r = SHFileOperationW(&wFileOp);
lpFileOp->fAnyOperationsAborted = wFileOp.fAnyOperationsAborted;
END_ROUTINE
wmii.hbmpChecked = lpmii->hbmpChecked;
wmii.hbmpUnchecked = lpmii->hbmpUnchecked;
wmii.dwItemData = lpmii->dwItemData;
- pw0 = DuplicateMtoWBuffer(lpmii->dwTypeData, -1, lpmii->cch * 4);
- wmii.dwTypeData = pw0;
- wmii.cch = lpmii->cch * 4;
+ if(lpmii->fMask & MIIM_TYPE)
+ {
+ pw0 = DuplicateMtoWBuffer(lpmii->dwTypeData, -1, lpmii->cch * 4);
+ wmii.dwTypeData = pw0;
+ wmii.cch = lpmii->cch * 4;
+ }
+ wmii.hbmpItem = lpmii->hbmpItem;
r = GetMenuItemInfoW(hmenu, item, fByPosition, &wmii);
lpmii->fType = wmii.fType;
lpmii->fState = wmii.fState;
v0->nFontType = a0.nFontType;
if(pwlf)
free(pwlf);
- FreeDuplicatedString(a0.lpTemplateName);
+ FreeDuplicatedString((void*)a0.lpTemplateName);
FreeDuplicatedString(a0.lpszStyle);
END_ROUTINE
FreeDuplicatedString(pw0);
if(wr)
{
*wr = L'\0';
- r = _Str + WtoM(NULL, 0, pw0, -1) - 1;
+ r = (unsigned char*)_Str + WtoM(NULL, 0, pw0, -1) - 1;
}
END_ROUTINE
FreeDuplicatedString(pw0);
if(wr)
{
*wr = L'\0';
- r = _Str + WtoM(NULL, 0, pw0, -1) - 1;
+ r = (unsigned char*)_Str + WtoM(NULL, 0, pw0, -1) - 1;
}
END_ROUTINE
FreeDuplicatedString(pw0);
if(wr)
{
*wr = L'\0';
- r = _Str + WtoM(NULL, 0, pw0, -1) - 1;
+ r = (unsigned char*)_Str + WtoM(NULL, 0, pw0, -1) - 1;
}
END_ROUTINE
FreeDuplicatedString(pw0);
if(wr)
{
*wr = L'\0';
- r = _Str + WtoM(NULL, 0, pw0, -1) - 1;
+ r = (unsigned char*)_Str + WtoM(NULL, 0, pw0, -1) - 1;
}
END_ROUTINE
FreeDuplicatedString(pw0);
#ifndef DO_NOT_REPLACE
+#undef WinMain
+#define WinMain WinMainM
+int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow);
+#undef LoadLibrary
+#define LoadLibrary LoadLibraryM
+HMODULE LoadLibraryM(LPCSTR lpLibFileName);
#undef CreateFile
#define CreateFile CreateFileM
HANDLE CreateFileM(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
#undef DragQueryFile
#define DragQueryFile DragQueryFileM
UINT DragQueryFileM(HDROP hDrop, UINT iFile, LPSTR lpszFile, UINT cch);
+#undef GetCommandLine
+#define GetCommandLine GetCommandLineM
+LPSTR GetCommandLineM();
#undef GetCurrentDirectory
#define GetCurrentDirectory GetCurrentDirectoryM
DWORD GetCurrentDirectoryM(DWORD nBufferLength, LPSTR lpBuffer);
#undef SetCurrentDirectory
#define SetCurrentDirectory SetCurrentDirectoryM
BOOL SetCurrentDirectoryM(LPCSTR lpPathName);
-#undef SetDllDirectory
-#define SetDllDirectory SetDllDirectoryM
-BOOL SetDllDirectoryM(LPCSTR lpPathName);
#undef GetTempPath
#define GetTempPath GetTempPathM
DWORD GetTempPathM(DWORD nBufferLength, LPSTR lpBuffer);
int MtoW(LPWSTR pDst, int size, LPCSTR pSrc, int count);
int WtoM(LPSTR pDst, int size, LPCWSTR pSrc, int count);
+int AtoW(LPWSTR pDst, int size, LPCSTR pSrc, int count);
int WtoA(LPSTR pDst, int size, LPCWSTR pSrc, int count);
int TerminateStringM(LPSTR lpString, int size);
int TerminateStringW(LPWSTR lpString, int size);
-int TerminateStringA(LPWSTR lpString, int size);
+int TerminateStringA(LPSTR lpString, int size);
size_t GetMultiStringLengthM(LPCSTR lpString);
size_t GetMultiStringLengthW(LPCWSTR lpString);
-size_t GetMultiStringLengthA(LPCWSTR lpString);
+size_t GetMultiStringLengthA(LPCSTR lpString);
int MtoWMultiString(LPWSTR pDst, int size, LPCSTR pSrc);
int WtoMMultiString(LPSTR pDst, int size, LPCWSTR pSrc);
+int AtoWMultiString(LPWSTR pDst, int size, LPCSTR pSrc);
int WtoAMultiString(LPSTR pDst, int size, LPCWSTR pSrc);
char* AllocateStringM(int size);
wchar_t* AllocateStringW(int size);
wchar_t* DuplicateMtoWMultiString(LPCSTR lpString);
wchar_t* DuplicateMtoWMultiStringBuffer(LPCSTR lpString, int size);
char* DuplicateWtoM(LPCWSTR lpString, int c);
+wchar_t* DuplicateAtoW(LPCSTR lpString, int c);
char* DuplicateWtoA(LPCWSTR lpString, int c);
void FreeDuplicatedString(void* p);
+int WINAPI WinMainM(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);
+
#endif
PROPSHEETPAGE psp[12];\r
PROPSHEETHEADER psh;\r
\r
+ // 変数が未初期化のバグ修正\r
+ memset(&psp, 0, sizeof(psp));\r
+ memset(&psh, 0, sizeof(psh));\r
+\r
psp[0].dwSize = sizeof(PROPSHEETPAGE);\r
psp[0].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
psp[0].hInstance = GetFtpInst();\r
\r
#define STRICT\r
\r
-#define WINVER 0x400\r
+// UTF-8対応\r
+//#define WINVER 0x400\r
\r
#include <windows.h>\r
#include <stdio.h>\r
-// socketwrapper.cpp
+// socketwrapper.c
// Copyright (C) 2011 Suguru Kawamoto
// ソケットラッパー
// socket関連関数をOpenSSL用に置換