• R/O
  • SSH
  • HTTPS

ttssh2: Commit


Commit MetaInfo

Revision9837 (tree)
Time2022-03-25 22:38:49
Authorzmatsuo

Log Message

refactoring, コメント追記

Change Summary

Incremental Difference

--- trunk/cygwin/cyglaunch/cyglaunch.c (revision 9836)
+++ trunk/cygwin/cyglaunch/cyglaunch.c (revision 9837)
@@ -66,7 +66,6 @@
6666
6767 int wmain(int argc, wchar_t *argv[])
6868 {
69- wchar_t *CygwinDir;
7069 wchar_t *Cmdline;
7170 int i;
7271 DWORD e;
@@ -98,15 +97,16 @@
9897 }
9998 }
10099
101- // cygwinがインストールされているフォルダ
102- CygwinDir = GetCygwinDir();
103100
104101 // cygtermを実行する
105102 if (msys2term) {
106- e = Msys2Connect(CygwinDir, Cmdline);
103+ e = Msys2Connect(L"c:\\msys64", Cmdline);
107104 }
108105 else {
106+ // cygwinがインストールされているフォルダ
107+ wchar_t *CygwinDir = GetCygwinDir();
109108 e = CygwinConnect(CygwinDir, Cmdline);
109+ free(CygwinDir);
110110 }
111111
112112 switch(e) {
@@ -128,6 +128,5 @@
128128 }
129129
130130 free(Cmdline);
131- free(CygwinDir);
132131 return 0;
133132 }
--- trunk/cygwin/cyglib/cyglib.c (revision 9836)
+++ trunk/cygwin/cyglib/cyglib.c (revision 9837)
@@ -41,8 +41,9 @@
4141 /**
4242 * cygwin1.dll / msys-2.0.dllを探す
4343 *
44- * @param[in] dll_base dllファイル名
44+ * @param[in] dll_base "cygwin1", "msys-2.0" など、"dll" を除いたベース
4545 * @param[in] cygwin_dir (存在するであろう)フォルダ(*1)
46+ * 指定なしの場合は NULL を渡す
4647 * @param[in] search_paths (*1)が見つからなかったときに探すパス
4748 * @param[out] find_dir 見つかったフォルダ free() すること
4849 * @param[out] find_in_path 環境変数 PATH 内に見つかった
@@ -64,26 +65,33 @@
6465
6566 // 指定されたフォルダに存在するか?
6667 if (cygwin_dir != NULL && cygwin_dir[0] != 0) {
67- // SearchPathW() で探す
68- dll = NULL;
69- awcscats(&dll, L"bin\\", dll_base, NULL);
70- r = SearchPathW(cygwin_dir, dll, L".dll", _countof(file), file, &filename);
71- free(dll);
72- if (r > 0) {
73- goto found_dll;
74- }
68+ static const wchar_t *dll_paths[] = {
69+ L"bin\\", // cygwinは bin/ の下にdllがある
70+ L"usr\\bin\\" // msys2は usr/bin/ の下にdllがある
71+ };
72+ for (i = 0; i < _countof(dll_paths); i++) {
73+ // SearchPathW() で探す
74+ dll = NULL;
75+ awcscats(&dll, dll_paths[i], dll_base, NULL);
76+ r = SearchPathW(cygwin_dir, dll, L".dll", _countof(file), file, &filename);
77+ free(dll);
78+ if (r > 0) {
79+ goto found_dll;
80+ }
7581
76- // SearchPathW() だと "msys-2.0.dll" が見つけることができない (Windows 10)
77- dll = NULL;
78- awcscats(&dll, cygwin_dir, L"\\bin\\", dll_base, L".dll", NULL);
79- r = GetFileAttributesW(dll);
80- if (r != INVALID_FILE_ATTRIBUTES) {
81- // 見つかった
82+ // 見つからなかったら GetFileAttributesW() でさらに調べる
83+ // SearchPathW() が"msys-2.0.dll" が見つけることができない
84+ // "." が入っているからか?
85+ dll = NULL;
86+ awcscats(&dll, cygwin_dir, L"\\", dll_paths[i], dll_base, L".dll", NULL);
8287 wcscpy_s(file, _countof(file), dll);
8388 free(dll);
84- goto found_dll;
89+ r = GetFileAttributesW(file);
90+ if (r != INVALID_FILE_ATTRIBUTES) {
91+ // 見つかった
92+ goto found_dll;
93+ }
8594 }
86- free(dll);
8795 }
8896
8997 // PATH から探す
@@ -179,8 +187,10 @@
179187 /**
180188 * Connect to local cygwin
181189 * cygtermを実行
182- *
183- * @param[in] CygwinDirectory Cygwinがインストールしてあるフォルダ
190+
191+ * @param[in] dll_base "cygwin1", "msys-2.0" など、"dll" を除いたベース
192+ * @param[in] CygwinDirectory Cygwin(msys2)がインストールしてあるフォルダ
193+ * 指定なしの場合は NULL を渡す
184194 * 見つからなければデフォルトフォルダなどを探す
185195 * @param[in] cmdline cygtermに渡すコマンドライン引数
186196 * NULLのとき引数なし
Show on old repository browser