リビジョン | efa5a426d981fffebd6a4904de7c970924ba9c1f (tree) |
---|---|
日時 | 2019-09-03 01:06:57 |
作者 | Starg <starg@user...> |
コミッター | Starg |
Fix the bug where choosing an output path crashes the app
@@ -240,8 +240,8 @@ extern int RestartTimidity; | ||
240 | 240 | #endif |
241 | 241 | |
242 | 242 | static int DlgOpenConfigFile(TCHAR *Filename, HWND hwnd); |
243 | -static int DlgOpenOutputFile(char *Filename, HWND hwnd); | |
244 | -static int DlgOpenOutputDir(char *Dirname, HWND hwnd); | |
243 | +static int DlgOpenOutputFile(TCHAR *Filename, HWND hwnd); | |
244 | +static int DlgOpenOutputDir(TCHAR *Dirname, HWND hwnd); | |
245 | 245 | |
246 | 246 | static HFONT hFixedPointFont; |
247 | 247 |
@@ -4677,38 +4677,38 @@ PrefTiMidity3DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam) | ||
4677 | 4677 | break; |
4678 | 4678 | case IDC_BUTTON_OUTPUT_FILE: |
4679 | 4679 | { |
4680 | - char filename[FILEPATH_MAX]; | |
4681 | - filename[0] = filename[FILEPATH_MAX - 1] = '\0'; | |
4682 | - EB_GETTEXTA(IDC_EDIT_OUTPUT_FILE, filename, FILEPATH_MAX - 1); | |
4680 | + TCHAR filename[FILEPATH_MAX]; | |
4681 | + filename[0] = filename[FILEPATH_MAX - 1] = _T('\0'); | |
4682 | + EB_GETTEXT(IDC_EDIT_OUTPUT_FILE, filename, FILEPATH_MAX - 1); | |
4683 | 4683 | if (st_temp->auto_output_mode > 0) { |
4684 | - if (!DlgOpenOutputDir(filename, hwnd) && filename[0] != '\0') | |
4685 | - EB_SETTEXTA(IDC_EDIT_OUTPUT_FILE, filename); | |
4684 | + if (!DlgOpenOutputDir(filename, hwnd) && filename[0] != _T('\0')) | |
4685 | + EB_SETTEXT(IDC_EDIT_OUTPUT_FILE, filename); | |
4686 | 4686 | } |
4687 | 4687 | else { |
4688 | - if (!DlgOpenOutputFile(filename, hwnd) && filename[0] != '\0') | |
4689 | - EB_SETTEXTA(IDC_EDIT_OUTPUT_FILE, filename); | |
4688 | + if (!DlgOpenOutputFile(filename, hwnd) && filename[0] != _T('\0')) | |
4689 | + EB_SETTEXT(IDC_EDIT_OUTPUT_FILE, filename); | |
4690 | 4690 | } |
4691 | 4691 | } |
4692 | 4692 | break; |
4693 | 4693 | case IDC_BUTTON_OUTPUT_FILE_DEL: |
4694 | 4694 | { |
4695 | - char filename[FILEPATH_MAX]; | |
4695 | + TCHAR filename[FILEPATH_MAX]; | |
4696 | 4696 | DWORD res; |
4697 | 4697 | if (st_temp->auto_output_mode > 0) { |
4698 | 4698 | break; |
4699 | 4699 | } |
4700 | - filename[0] = filename[FILEPATH_MAX - 1] = '\0'; | |
4701 | - EB_GETTEXTA(IDC_EDIT_OUTPUT_FILE, filename, FILEPATH_MAX - 1); | |
4702 | - res = GetFileAttributesA(filename); | |
4700 | + filename[0] = filename[FILEPATH_MAX - 1] = _T('\0'); | |
4701 | + EB_GETTEXT(IDC_EDIT_OUTPUT_FILE, filename, FILEPATH_MAX - 1); | |
4702 | + res = GetFileAttributes(filename); | |
4703 | 4703 | if (res != 0xFFFFFFFF && !(res & FILE_ATTRIBUTE_DIRECTORY)) { |
4704 | - if (DeleteFileA(filename) != TRUE) { | |
4705 | - char buffer[FILEPATH_MAX + 128]; | |
4706 | - sprintf(buffer, "Can't delete file %s !", filename); | |
4707 | - MessageBoxA(NULL, buffer, "Error!", MB_OK); | |
4704 | + if (DeleteFile(filename) != TRUE) { | |
4705 | + TCHAR buffer[FILEPATH_MAX + 128]; | |
4706 | + wsprintf(buffer, _T("Can't delete file %s !"), filename); | |
4707 | + MessageBox(NULL, buffer, _T("Error!"), MB_OK); | |
4708 | 4708 | } else { |
4709 | - char buffer[FILEPATH_MAX + 128]; | |
4710 | - sprintf(buffer, "Delete file %s !", filename); | |
4711 | - MessageBoxA(NULL, buffer, "Delete!", MB_OK); | |
4709 | + TCHAR buffer[FILEPATH_MAX + 128]; | |
4710 | + wsprintf(buffer, _T("Delete file %s !"), filename); | |
4711 | + MessageBox(NULL, buffer, _T("Delete!"), MB_OK); | |
4712 | 4712 | } |
4713 | 4713 | } |
4714 | 4714 | } |
@@ -6040,7 +6040,7 @@ static int DlgOpenConfigFile(TCHAR *Filename, HWND hwnd) | ||
6040 | 6040 | } |
6041 | 6041 | } |
6042 | 6042 | |
6043 | -static int DlgOpenOutputFile(char *Filename, HWND hwnd) | |
6043 | +static int DlgOpenOutputFile(TCHAR *Filename, HWND hwnd) | |
6044 | 6044 | { |
6045 | 6045 | OPENFILENAME ofn; |
6046 | 6046 | TCHAR filename[FILEPATH_MAX], |
@@ -6074,9 +6074,7 @@ static int DlgOpenOutputFile(char *Filename, HWND hwnd) | ||
6074 | 6074 | } |
6075 | 6075 | _tcsncpy(dir, OutputFileOpenDir, FILEPATH_MAX); |
6076 | 6076 | dir[FILEPATH_MAX - 1] = _T('\0'); |
6077 | - TCHAR *tfilename = char_to_tchar(Filename); | |
6078 | - _tcsncpy(filename, tfilename, FILEPATH_MAX); | |
6079 | - safe_free(tfilename); | |
6077 | + _tcsncpy(filename, Filename, FILEPATH_MAX - 1); | |
6080 | 6078 | filename[FILEPATH_MAX - 1] = _T('\0'); |
6081 | 6079 | if (_tcslen(filename) > 0 && IS_PATH_SEP(filename[_tcslen(filename) - 1])) |
6082 | 6080 | _tcsncat(filename, _T("output.wav"), FILEPATH_MAX - _tcslen(filename) - 1); |
@@ -6108,13 +6106,11 @@ static int DlgOpenOutputFile(char *Filename, HWND hwnd) | ||
6108 | 6106 | _tcsncpy(OutputFileOpenDir, dir, FILEPATH_MAX); |
6109 | 6107 | OutputFileOpenDir[FILEPATH_MAX - 1] = _T('\0'); |
6110 | 6108 | if (res != FALSE) { |
6111 | - char *s = tchar_to_char(filename); | |
6112 | - strncpy(Filename, s, FILEPATH_MAX); | |
6113 | - safe_free(s); | |
6114 | - Filename[FILEPATH_MAX - 1] = '\0'; | |
6109 | + _tcsncpy(Filename, filename, FILEPATH_MAX - 1); | |
6110 | + Filename[FILEPATH_MAX - 1] = _T('\0'); | |
6115 | 6111 | return 0; |
6116 | 6112 | } else { |
6117 | - Filename[0] = '\0'; | |
6113 | + Filename[0] = _T('\0'); | |
6118 | 6114 | return -1; |
6119 | 6115 | } |
6120 | 6116 | } |
@@ -6134,7 +6130,7 @@ DlgOpenOutputDirBrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM l | ||
6134 | 6130 | return 0; |
6135 | 6131 | } |
6136 | 6132 | |
6137 | -static int DlgOpenOutputDir(char *Dirname, HWND hwnd) | |
6133 | +static int DlgOpenOutputDir(TCHAR *Dirname, HWND hwnd) | |
6138 | 6134 | { |
6139 | 6135 | static int initflag = 1; |
6140 | 6136 | static TCHAR biBuffer[FILEPATH_MAX]; |
@@ -6151,7 +6147,7 @@ static int DlgOpenOutputDir(char *Dirname, HWND hwnd) | ||
6151 | 6147 | title = title_en; |
6152 | 6148 | |
6153 | 6149 | if (initflag == 1) { |
6154 | - biBuffer[0] = '\0'; | |
6150 | + biBuffer[0] = _T('\0'); | |
6155 | 6151 | initflag = 0; |
6156 | 6152 | } |
6157 | 6153 | ZeroMemory(&bi, sizeof(bi)); |
@@ -6169,19 +6165,22 @@ static int DlgOpenOutputDir(char *Dirname, HWND hwnd) | ||
6169 | 6165 | return -1; /* Cancel */ |
6170 | 6166 | |
6171 | 6167 | SHGetPathFromIDList(itemidlist, Buffer); |
6172 | - _tcsncpy(biBuffer, Buffer, sizeof(Buffer) - 1); | |
6173 | 6168 | |
6174 | 6169 | if (itemidlist_pre) |
6175 | 6170 | CoTaskMemFree(itemidlist_pre); |
6176 | 6171 | itemidlist_pre = itemidlist; |
6177 | 6172 | |
6178 | - char buf[FILEPATH_MAX]; | |
6173 | + char sbuf[FILEPATH_MAX] = ""; | |
6179 | 6174 | char *s = tchar_to_char(Buffer); |
6180 | - strncpy(buf, s, FILEPATH_MAX); | |
6175 | + strncpy(sbuf, s, FILEPATH_MAX - 1); | |
6181 | 6176 | safe_free(s); |
6182 | - buf[FILEPATH_MAX - 1] = '\0'; | |
6183 | - directory_form(buf); | |
6184 | - strcpy(Dirname, buf); | |
6177 | + sbuf[FILEPATH_MAX - 1] = '\0'; | |
6178 | + directory_form(sbuf); | |
6179 | + | |
6180 | + TCHAR *t = char_to_tchar(sbuf); | |
6181 | + _tcsncpy(Dirname, t, FILEPATH_MAX - 1); | |
6182 | + safe_free(t); | |
6183 | + Dirname[FILEPATH_MAX - 1] = _T('\0'); | |
6185 | 6184 | return 0; |
6186 | 6185 | } |
6187 | 6186 |