• R/O
  • SSH
  • HTTPS

ttssh2: Commit


Commit MetaInfo

Revision9135 (tree)
Time2021-01-23 00:00:58
Authornmaya

Log Message

CreateFile の共有モードを修正

- GENERIC_WRITE で開くときに FILE_SHARE_WRITE で共有している箇所を 0 (共有しない)に修正
- Win16 API の _lcreat, _lopen はロックしないので、互換性のため FILE_SHARE_READ | FILE_SHARE_WRITE に変更
- TTL の filecreate, fileopen のファイルハンドルは filelock でロックするので、 FILE_SHARE_READ | FILE_SHARE_WRITE に変更

dwShareMode で指定する共有モードは、後続の"ファイルを開く"操作に対して「有効にする」アクセスを指定する

https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea
Enables subsequent open operations on a file or device to request xxx access.

#41305 の修正を含む

Change Summary

Incremental Difference

--- branches/4-stable/doc/en/html/about/history.html (revision 9134)
+++ branches/4-stable/doc/en/html/about/history.html (revision 9135)
@@ -47,6 +47,7 @@
4747 <li>Fixed desktop images can not be displayed on background other than main display. This bug was introduced in 4.103.</li>
4848 <li>Fixed an application fault occurs when VT Window and HtmlHelp Windows are closed at same time</li>
4949 <li>The elapsed time style timestamp in the log is incorrect.</li>
50+ <!--li><a href="../macro/command/filecreate.html">filecreate</a>, <a href="../macro/command/fileopen.html">fileopen</a> マクロコマンドで開いたファイルハンドルがロックしている問題を修正した。</li-->
5051 </ul>
5152 </li>
5253
--- branches/4-stable/doc/ja/html/about/history.html (revision 9134)
+++ branches/4-stable/doc/ja/html/about/history.html (revision 9135)
@@ -47,6 +47,7 @@
4747 <li>メインディスプレイ以外でデスクトップ画像を背景に表示できなかったのを修正。4.101でのエンバグ。</li>
4848 <li>VT ウィンドウと Htmlヘルプウィンドウを同時に閉じるとアプリケーションフォールトが発生する不具合を修正</li>
4949 <li>ログの経過時間形式のタイムスタンプの形式が正しくない問題を修正した。</li>
50+ <li><a href="../macro/command/filecreate.html">filecreate</a>, <a href="../macro/command/fileopen.html">fileopen</a> マクロコマンドで開いたファイルハンドルがロックしている問題を修正した。</li>
5051 </ul>
5152 </li>
5253
--- branches/4-stable/teraterm/common/win16api.c (revision 9134)
+++ branches/4-stable/teraterm/common/win16api.c (revision 9135)
@@ -2,6 +2,12 @@
22 #include <assert.h>
33
44 /**
5+ * Win16 API の _lcreat, _lopen はロックしないので、
6+ * 互換性のため CreateFile() の dwShareMode には
7+ * FILE_SHARE_READ | FILE_SHARE_WRITE を指定する。
8+ */
9+
10+ /**
511 * @param[in] iAttribute teratermでは0しか使用しない
612 * @retval handle
713 * @retval INVALID_HANDLE_VALUE((HANDLE)(LONG_PTR)-1) オープンできなかった
@@ -12,7 +18,7 @@
1218 HANDLE handle;
1319 assert(iAttribute == 0);
1420 handle = CreateFileA(FileName,
15- GENERIC_WRITE, FILE_SHARE_WRITE, NULL,
21+ GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
1622 CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
1723 return handle;
1824 }
@@ -29,19 +35,19 @@
2935 case OF_READ:
3036 // read only
3137 handle = CreateFileA(FileName,
32- GENERIC_READ, FILE_SHARE_READ, NULL,
38+ GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
3339 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
3440 break;
3541 case OF_WRITE:
3642 // write
3743 handle = CreateFileA(FileName,
38- GENERIC_WRITE, FILE_SHARE_WRITE, NULL,
44+ GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
3945 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
4046 break;
4147 case OF_READWRITE:
4248 // read/write (teratermではttpmacro/ttl.c内の1箇所のみで使用されている
4349 handle = CreateFileA(FileName,
44- GENERIC_WRITE|GENERIC_READ, FILE_SHARE_WRITE, NULL,
50+ GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
4551 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
4652 break;
4753 default:
--- branches/4-stable/teraterm/teraterm/filesys.cpp (revision 9134)
+++ branches/4-stable/teraterm/teraterm/filesys.cpp (revision 9135)
@@ -643,6 +643,8 @@
643643
644644 if (ts.Append > 0)
645645 {
646+ // LogLockExclusive が有効な場合にまったく共有しないと、
647+ // 書き込み中のログファイルを他のエディタで開けないため
646648 int dwShareMode = FILE_SHARE_READ;
647649 if (!ts.LogLockExclusive) {
648650 dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;
@@ -659,6 +661,8 @@
659661 }
660662 }
661663 else {
664+ // LogLockExclusive が有効な場合にまったく共有しないと、
665+ // 書き込み中のログファイルを他のエディタで開けないため
662666 int dwShareMode = FILE_SHARE_READ;
663667 if (!ts.LogLockExclusive) {
664668 dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;
@@ -865,6 +869,8 @@
865869 char filename[1024];
866870 char newfile[1024], oldfile[1024];
867871 int i, k;
872+ // LogLockExclusive が有効な場合にまったく共有しないと、
873+ // 書き込み中のログファイルを他のエディタで開けないため
868874 int dwShareMode = FILE_SHARE_READ;
869875 unsigned tid;
870876
Show on old repository browser