OSDN Git Service

Fix bugs of displaying icons in the local file list.
[ffftp/ffftp.git] / mbswrapper.c
index 62b2112..86a1b21 100644 (file)
@@ -699,10 +699,28 @@ END_ROUTINE
 ATOM RegisterClassExM(CONST WNDCLASSEXA * v0)\r
 {\r
        ATOM r = 0;\r
+       wchar_t* pw0 = NULL;\r
+       wchar_t* pw1 = NULL;\r
+       WNDCLASSEXW a0;\r
 START_ROUTINE\r
-       // WNDPROCがShift_JIS用であるため\r
-       r = RegisterClassExA(v0);\r
+       a0.cbSize = sizeof(WNDCLASSEXW);\r
+       a0.style = v0->style;\r
+       a0.lpfnWndProc = v0->lpfnWndProc;\r
+       a0.cbClsExtra = v0->cbClsExtra;\r
+       a0.cbWndExtra = v0->cbWndExtra;\r
+       a0.hInstance = v0->hInstance;\r
+       a0.hIcon = v0->hIcon;\r
+       a0.hCursor = v0->hCursor;\r
+       a0.hbrBackground = v0->hbrBackground;\r
+       pw0 = DuplicateMtoW(v0->lpszMenuName, -1);\r
+       a0.lpszMenuName = pw0;\r
+       pw1 = DuplicateMtoW(v0->lpszClassName, -1);\r
+       a0.lpszClassName = pw1;\r
+       a0.hIconSm = v0->hIconSm;\r
+       r = RegisterClassExW(&a0);\r
 END_ROUTINE\r
+       FreeDuplicatedString(pw0);\r
+       FreeDuplicatedString(pw1);\r
        return r;\r
 }\r
 \r
@@ -725,7 +743,6 @@ LONG GetWindowLongM(HWND hWnd, int nIndex)
 {\r
        LONG r = 0;\r
 START_ROUTINE\r
-       // WNDPROCがShift_JIS用であるため\r
        if(IsWindowUnicode(hWnd))\r
                r = GetWindowLongW(hWnd, nIndex);\r
        else\r
@@ -738,7 +755,6 @@ LONG SetWindowLongM(HWND hWnd, int nIndex, LONG dwNewLong)
 {\r
        LONG r = 0;\r
 START_ROUTINE\r
-       // WNDPROCがShift_JIS用であるため\r
        if(IsWindowUnicode(hWnd))\r
                r = SetWindowLongW(hWnd, nIndex, dwNewLong);\r
        else\r
@@ -751,7 +767,6 @@ LONG_PTR GetWindowLongPtrM(HWND hWnd, int nIndex)
 {\r
        LONG_PTR r = 0;\r
 START_ROUTINE\r
-       // WNDPROCがShift_JIS用であるため\r
        if(IsWindowUnicode(hWnd))\r
                r = GetWindowLongPtrW(hWnd, nIndex);\r
        else\r
@@ -764,7 +779,6 @@ LONG_PTR SetWindowLongPtrM(HWND hWnd, int nIndex, LONG_PTR dwNewLong)
 {\r
        LONG_PTR r = 0;\r
 START_ROUTINE\r
-       // WNDPROCがShift_JIS用であるため\r
        if(IsWindowUnicode(hWnd))\r
                r = SetWindowLongPtrW(hWnd, nIndex, dwNewLong);\r
        else\r
@@ -777,7 +791,6 @@ LRESULT DefWindowProcM(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
 {\r
        LRESULT r = 0;\r
 START_ROUTINE\r
-       // WNDPROCがShift_JIS用であるため\r
        if(IsWindowUnicode(hWnd))\r
                r = DefWindowProcW(hWnd, Msg, wParam, lParam);\r
        else\r
@@ -790,7 +803,6 @@ LRESULT CallWindowProcM(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wPara
 {\r
        LRESULT r = 0;\r
 START_ROUTINE\r
-       // WNDPROCがShift_JIS用であるため\r
        if(IsWindowUnicode(hWnd))\r
                r = CallWindowProcW(lpPrevWndFunc, hWnd, Msg, wParam, lParam);\r
        else\r
@@ -1875,6 +1887,26 @@ END_ROUTINE
        return r;\r
 }\r
 \r
+DWORD_PTR SHGetFileInfoM(LPCSTR pszPath, DWORD dwFileAttributes, SHFILEINFOA *psfi, UINT cbFileInfo, UINT uFlags)\r
+{\r
+       DWORD_PTR r = 0;\r
+       wchar_t* pw0 = NULL;\r
+       SHFILEINFOW wsfi;\r
+START_ROUTINE\r
+       pw0 = DuplicateMtoWMultiString(pszPath);\r
+       if((r = SHGetFileInfoW(pw0, dwFileAttributes, &wsfi, cbFileInfo, uFlags)) != 0)\r
+       {\r
+               psfi->hIcon = wsfi.hIcon;\r
+               psfi->iIcon = wsfi.iIcon;\r
+               psfi->dwAttributes = wsfi.dwAttributes;\r
+               WtoM(psfi->szDisplayName, MAX_PATH, wsfi.szDisplayName, -1);\r
+               WtoM(psfi->szTypeName, 80, wsfi.szTypeName, -1);\r
+       }\r
+END_ROUTINE\r
+       FreeDuplicatedString(pw0);\r
+       return r;\r
+}\r
+\r
 BOOL AppendMenuM(HMENU hMenu, UINT uFlags, UINT_PTR uIDNewItem, LPCSTR lpNewItem)\r
 {\r
        int r = 0;\r
@@ -1958,6 +1990,7 @@ BOOL ChooseFontM(LPCHOOSEFONTA v0)
 {\r
        BOOL r = FALSE;\r
        wchar_t* pw0 = NULL;\r
+       wchar_t* pw1 = NULL;\r
        CHOOSEFONTW a0;\r
        LOGFONTW* pwlf;\r
 START_ROUTINE\r
@@ -1990,9 +2023,11 @@ START_ROUTINE
        a0.rgbColors = v0->rgbColors;\r
        a0.lCustData = v0->lCustData;\r
        a0.lpfnHook = v0->lpfnHook;\r
-       a0.lpTemplateName = DuplicateMtoW(v0->lpTemplateName, -1);\r
+       pw0 = DuplicateMtoW(v0->lpTemplateName, -1);\r
+       a0.lpTemplateName = pw0;\r
        a0.hInstance = v0->hInstance;\r
-       a0.lpszStyle = DuplicateMtoWBuffer(v0->lpszStyle, -1, LF_FACESIZE * 4);\r
+       pw1 = DuplicateMtoWBuffer(v0->lpszStyle, -1, LF_FACESIZE * 4);\r
+       a0.lpszStyle = pw1;\r
        a0.nFontType = v0->nFontType;\r
        a0.nSizeMin = v0->nSizeMin;\r
        a0.nSizeMax = v0->nSizeMax;\r
@@ -2016,15 +2051,14 @@ START_ROUTINE
                TerminateStringM(v0->lpLogFont->lfFaceName, LF_FACESIZE);\r
        }\r
        v0->rgbColors = a0.rgbColors;\r
-       WtoM(v0->lpszStyle, LF_FACESIZE, a0.lpszStyle, -1);\r
+       WtoM(v0->lpszStyle, LF_FACESIZE, pw1, -1);\r
        TerminateStringM(v0->lpszStyle, LF_FACESIZE);\r
        v0->nFontType = a0.nFontType;\r
        if(pwlf)\r
                free(pwlf);\r
-       FreeDuplicatedString((void*)a0.lpTemplateName);\r
-       FreeDuplicatedString(a0.lpszStyle);\r
 END_ROUTINE\r
        FreeDuplicatedString(pw0);\r
+       FreeDuplicatedString(pw1);\r
        return r;\r
 }\r
 \r
@@ -2107,9 +2141,24 @@ END_ROUTINE
        return r;\r
 }\r
 \r
+BOOL MoveFileM(LPCSTR lpExistingFileName, LPCSTR lpNewFileName)\r
+{\r
+       BOOL r = FALSE;\r
+       wchar_t* pw0 = NULL;\r
+       wchar_t* pw1 = NULL;\r
+START_ROUTINE\r
+       pw0 = DuplicateMtoW(lpExistingFileName, -1);\r
+       pw1 = DuplicateMtoW(lpNewFileName, -1);\r
+       r = MoveFileW(pw0, pw1);\r
+END_ROUTINE\r
+       FreeDuplicatedString(pw0);\r
+       FreeDuplicatedString(pw1);\r
+       return r;\r
+}\r
+\r
 int mkdirM(const char * _Path)\r
 {\r
-       int r = 0;\r
+       int r = -1;\r
        wchar_t* pw0 = NULL;\r
 START_ROUTINE\r
        pw0 = DuplicateMtoW(_Path, -1);\r
@@ -2121,7 +2170,7 @@ END_ROUTINE
 \r
 int _mkdirM(const char * _Path)\r
 {\r
-       int r = 0;\r
+       int r = -1;\r
        wchar_t* pw0 = NULL;\r
 START_ROUTINE\r
        pw0 = DuplicateMtoW(_Path, -1);\r
@@ -2133,7 +2182,7 @@ END_ROUTINE
 \r
 int rmdirM(const char * _Path)\r
 {\r
-       int r = 0;\r
+       int r = -1;\r
        wchar_t* pw0 = NULL;\r
 START_ROUTINE\r
        pw0 = DuplicateMtoW(_Path, -1);\r
@@ -2145,7 +2194,7 @@ END_ROUTINE
 \r
 int _rmdirM(const char * _Path)\r
 {\r
-       int r = 0;\r
+       int r = -1;\r
        wchar_t* pw0 = NULL;\r
 START_ROUTINE\r
        pw0 = DuplicateMtoW(_Path, -1);\r
@@ -2155,6 +2204,42 @@ END_ROUTINE
        return r;\r
 }\r
 \r
+int removeM(const char * _Filename)\r
+{\r
+       int r = -1;\r
+       wchar_t* pw0 = NULL;\r
+START_ROUTINE\r
+       pw0 = DuplicateMtoW(_Filename, -1);\r
+       r = _wremove(pw0);\r
+END_ROUTINE\r
+       FreeDuplicatedString(pw0);\r
+       return r;\r
+}\r
+\r
+int _removeM(const char * _Filename)\r
+{\r
+       int r = -1;\r
+       wchar_t* pw0 = NULL;\r
+START_ROUTINE\r
+       pw0 = DuplicateMtoW(_Filename, -1);\r
+       r = _wremove(pw0);\r
+END_ROUTINE\r
+       FreeDuplicatedString(pw0);\r
+       return r;\r
+}\r
+\r
+int _unlinkM(const char * _Filename)\r
+{\r
+       int r = -1;\r
+       wchar_t* pw0 = NULL;\r
+START_ROUTINE\r
+       pw0 = DuplicateMtoW(_Filename, -1);\r
+       r = _wunlink(pw0);\r
+END_ROUTINE\r
+       FreeDuplicatedString(pw0);\r
+       return r;\r
+}\r
+\r
 size_t _mbslenM(const unsigned char * _Str)\r
 {\r
        size_t r = 0;\r