• R/O
  • HTTP
  • SSH
  • HTTPS

コミット

タグ
未設定

よく使われているワード(クリックで追加)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

コミットメタ情報

リビジョンefa5a426d981fffebd6a4904de7c970924ba9c1f (tree)
日時2019-09-03 01:06:57
作者Starg <starg@user...>
コミッターStarg

ログメッセージ

Fix the bug where choosing an output path crashes the app

変更サマリ

差分

--- a/interface/w32g_pref.c
+++ b/interface/w32g_pref.c
@@ -240,8 +240,8 @@ extern int RestartTimidity;
240240 #endif
241241
242242 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);
245245
246246 static HFONT hFixedPointFont;
247247
@@ -4677,38 +4677,38 @@ PrefTiMidity3DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
46774677 break;
46784678 case IDC_BUTTON_OUTPUT_FILE:
46794679 {
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);
46834683 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);
46864686 }
46874687 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);
46904690 }
46914691 }
46924692 break;
46934693 case IDC_BUTTON_OUTPUT_FILE_DEL:
46944694 {
4695- char filename[FILEPATH_MAX];
4695+ TCHAR filename[FILEPATH_MAX];
46964696 DWORD res;
46974697 if (st_temp->auto_output_mode > 0) {
46984698 break;
46994699 }
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);
47034703 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);
47084708 } 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);
47124712 }
47134713 }
47144714 }
@@ -6040,7 +6040,7 @@ static int DlgOpenConfigFile(TCHAR *Filename, HWND hwnd)
60406040 }
60416041 }
60426042
6043-static int DlgOpenOutputFile(char *Filename, HWND hwnd)
6043+static int DlgOpenOutputFile(TCHAR *Filename, HWND hwnd)
60446044 {
60456045 OPENFILENAME ofn;
60466046 TCHAR filename[FILEPATH_MAX],
@@ -6074,9 +6074,7 @@ static int DlgOpenOutputFile(char *Filename, HWND hwnd)
60746074 }
60756075 _tcsncpy(dir, OutputFileOpenDir, FILEPATH_MAX);
60766076 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);
60806078 filename[FILEPATH_MAX - 1] = _T('\0');
60816079 if (_tcslen(filename) > 0 && IS_PATH_SEP(filename[_tcslen(filename) - 1]))
60826080 _tcsncat(filename, _T("output.wav"), FILEPATH_MAX - _tcslen(filename) - 1);
@@ -6108,13 +6106,11 @@ static int DlgOpenOutputFile(char *Filename, HWND hwnd)
61086106 _tcsncpy(OutputFileOpenDir, dir, FILEPATH_MAX);
61096107 OutputFileOpenDir[FILEPATH_MAX - 1] = _T('\0');
61106108 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');
61156111 return 0;
61166112 } else {
6117- Filename[0] = '\0';
6113+ Filename[0] = _T('\0');
61186114 return -1;
61196115 }
61206116 }
@@ -6134,7 +6130,7 @@ DlgOpenOutputDirBrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM l
61346130 return 0;
61356131 }
61366132
6137-static int DlgOpenOutputDir(char *Dirname, HWND hwnd)
6133+static int DlgOpenOutputDir(TCHAR *Dirname, HWND hwnd)
61386134 {
61396135 static int initflag = 1;
61406136 static TCHAR biBuffer[FILEPATH_MAX];
@@ -6151,7 +6147,7 @@ static int DlgOpenOutputDir(char *Dirname, HWND hwnd)
61516147 title = title_en;
61526148
61536149 if (initflag == 1) {
6154- biBuffer[0] = '\0';
6150+ biBuffer[0] = _T('\0');
61556151 initflag = 0;
61566152 }
61576153 ZeroMemory(&bi, sizeof(bi));
@@ -6169,19 +6165,22 @@ static int DlgOpenOutputDir(char *Dirname, HWND hwnd)
61696165 return -1; /* Cancel */
61706166
61716167 SHGetPathFromIDList(itemidlist, Buffer);
6172- _tcsncpy(biBuffer, Buffer, sizeof(Buffer) - 1);
61736168
61746169 if (itemidlist_pre)
61756170 CoTaskMemFree(itemidlist_pre);
61766171 itemidlist_pre = itemidlist;
61776172
6178- char buf[FILEPATH_MAX];
6173+ char sbuf[FILEPATH_MAX] = "";
61796174 char *s = tchar_to_char(Buffer);
6180- strncpy(buf, s, FILEPATH_MAX);
6175+ strncpy(sbuf, s, FILEPATH_MAX - 1);
61816176 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');
61856184 return 0;
61866185 }
61876186