Develop and Download Open Source Software

Browse Subversion Repository

Diff of /trunk/teraterm/teraterm/filesys_log.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 8900 by zmatsuo, Tue Aug 18 15:29:32 2020 UTC revision 8901 by zmatsuo, Tue Aug 18 15:29:44 2020 UTC
# Line 59  Line 59 
59  #include "filesys_log_res.h"  #include "filesys_log_res.h"
60  #include "filesys_log.h"  #include "filesys_log.h"
61    
62    /*
63       Line Head flag for timestamping
64       2007.05.24 Gentaro
65    */
66    enum enumLineEnd {
67            Line_Other = 0,
68            Line_LineHead = 1,
69            Line_FileHead = 2,
70    };
71    
72  typedef struct {  typedef struct {
73    wchar_t *FullName;          wchar_t *FullName;
74    wchar_t *FileName;          wchar_t *FileName;
75    
76            HANDLE FileHandle;
77            LONG FileSize, ByteCount;
78    
79    BOOL FileOpen;          DWORD StartTime;
   HANDLE FileHandle;  
   LONG FileSize, ByteCount;  
80    
81    DWORD StartTime;          enum enumLineEnd eLineEnd;
82    
83    // log rotate          // log rotate
84    int RotateMode;  //  enum rotate_mode RotateMode;          int RotateMode;  //  enum rotate_mode RotateMode;
85    LONG RotateSize;          LONG RotateSize;
86    int RotateStep;          int RotateStep;
87    
88    HANDLE LogThread;          HANDLE LogThread;
89    DWORD LogThreadId;          DWORD LogThreadId;
90    HANDLE LogThreadEvent;          HANDLE LogThreadEvent;
91    
92    BOOL IsPause;          BOOL IsPause;
93    
94            PFileTransDlg FLogDlg;
95  } TFileVar_;  } TFileVar_;
96  typedef TFileVar_ *PFileVar_;  typedef TFileVar_ *PFileVar_;
97    
# Line 90  static PFileVar LogVar = NULL; Line 103  static PFileVar LogVar = NULL;
103  static BOOL FileLog = FALSE;  static BOOL FileLog = FALSE;
104  static BOOL BinLog = FALSE;  static BOOL BinLog = FALSE;
105    
 /*  
    Line Head flag for timestamping  
    2007.05.24 Gentaro  
 */  
 enum enumLineEnd {  
         Line_Other = 0,  
         Line_LineHead = 1,  
         Line_FileHead = 2,  
 };  
   
 static enum enumLineEnd eLineEnd = Line_LineHead;  
   
   
106  // 遅延書き込み用スレッドのメッセージ  // 遅延書き込み用スレッドのメッセージ
107  #define WM_DPC_LOGTHREAD_SEND (WM_APP + 1)  #define WM_DPC_LOGTHREAD_SEND (WM_APP + 1)
108    
# Line 112  static void LogBinSkip(int add); Line 112  static void LogBinSkip(int add);
112  static BOOL CreateLogBuf(void);  static BOOL CreateLogBuf(void);
113  static BOOL CreateBinBuf(void);  static BOOL CreateBinBuf(void);
114    
 static PFileTransDlg FLogDlg = NULL;  
115    
116  static BOOL OpenFTDlg_(PFileVar fv)  static BOOL OpenFTDlg_(PFileVar fv)
117  {  {
# Line 138  static BOOL OpenFTDlg_(PFileVar fv) Line 137  static BOOL OpenFTDlg_(PFileVar fv)
137          FTDlg->Create(hInst, &info);          FTDlg->Create(hInst, &info);
138          FTDlg->RefreshNum(0, fv->FileSize, fv->ByteCount);          FTDlg->RefreshNum(0, fv->FileSize, fv->ByteCount);
139    
140          FLogDlg = FTDlg;          fv->FLogDlg = FTDlg;
141    
142          free(DlgCaption);          free(DlgCaption);
143          return TRUE;          return TRUE;
# Line 222  static void CloseFileSync(PFileVar ptr) Line 221  static void CloseFileSync(PFileVar ptr)
221  {  {
222          BOOL ret;          BOOL ret;
223    
224          if (!ptr->FileOpen)          if (ptr->FileHandle == INVALID_HANDLE_VALUE) {
225                  return;                  return;
226            }
227    
228          if (ptr->LogThread != INVALID_HANDLE_VALUE) {          if (ptr->LogThread != INVALID_HANDLE_VALUE) {
229                  // スレッドの終了待ち                  // スレッドの終了待ち
# Line 239  static void CloseFileSync(PFileVar ptr) Line 239  static void CloseFileSync(PFileVar ptr)
239                  ptr->LogThread = INVALID_HANDLE_VALUE;                  ptr->LogThread = INVALID_HANDLE_VALUE;
240          }          }
241          CloseHandle(ptr->FileHandle);          CloseHandle(ptr->FileHandle);
242            ptr->FileHandle = INVALID_HANDLE_VALUE;
243  }  }
244    
245  // 遅延書き込み用スレッド  // 遅延書き込み用スレッド
# Line 277  end: Line 278  end:
278          return (0);          return (0);
279  }  }
280    
281    // 遅延書き込み用スレッドを起こす。
282    // (2013.4.19 yutaka)
283    // DeferredLogWriteThread スレッドが起床して、スレッドキューが作成されるより前に、
284    // ログファイルのクローズ(CloseFileSync)が行われると、エンキューが失敗し、デッドロック
285    // するという問題を修正した。
286    // スレッド間の同期を行うため、名前なしイベントオブジェクトを使って、スレッドキューの
287    // 作成まで待ち合わせするようにした。名前付きイベントオブジェクトを使う場合は、
288    // システム(Windows OS)上でユニークな名前にする必要がある。
289    // (2016.9.23 yutaka)
290    static void StartThread(PFileVar fv)
291    {
292            unsigned tid;
293            fv->LogThreadEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
294            fv->LogThread = (HANDLE)_beginthreadex(NULL, 0, DeferredLogWriteThread, fv, 0, &tid);
295            fv->LogThreadId = tid;
296            if (fv->LogThreadEvent != NULL) {
297                    WaitForSingleObject(fv->LogThreadEvent, INFINITE);
298                    CloseHandle(fv->LogThreadEvent);
299            }
300    }
301    
302  /**  /**
303   *      ダイアログの内容を ts に書き戻し   *      ダイアログの内容を ts に書き戻し
304   *   *
# Line 643  static INT_PTR CALLBACK LogFnHook(HWND D Line 665  static INT_PTR CALLBACK LogFnHook(HWND D
665          return FALSE;          return FALSE;
666  }  }
667    
668    static void OpenLogFile(PFileVar fv)
669    {
670            int dwShareMode = FILE_SHARE_READ;
671            if (!ts.LogLockExclusive) {
672                    dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;
673            }
674            LogVar->FileHandle = _CreateFileW(LogVar->FullName, GENERIC_WRITE, dwShareMode, NULL,
675                                                                              OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
676    }
677    
678  static BOOL LogStart(const wchar_t *fname)  static BOOL LogStart(const wchar_t *fname)
679  {  {
680          unsigned tid;          PFileVar fv = LogVar;
681    
682          LogVar->FullName = _wcsdup(fname);          fv->FullName = _wcsdup(fname);
683    
         PFileVar fv = LogVar;  
684          wchar_t *p = wcsrchr(fv->FullName, L'\\');          wchar_t *p = wcsrchr(fv->FullName, L'\\');
685          if (p == NULL) {          if (p == NULL) {
686                  p = wcsrchr(fv->FullName, L'/');                  p = wcsrchr(fv->FullName, L'/');
# Line 658  static BOOL LogStart(const wchar_t *fnam Line 689  static BOOL LogStart(const wchar_t *fnam
689                  fv->FileName = _wcsdup(fv->FullName);                  fv->FileName = _wcsdup(fv->FullName);
690          }          }
691          else {          else {
692                  fv->FileName = _wcsdup(p++);                  fv->FileName = _wcsdup(p + 1);
693          }          }
694          FixLogOption();          FixLogOption();
695    
# Line 668  static BOOL LogStart(const wchar_t *fnam Line 699  static BOOL LogStart(const wchar_t *fnam
699                  FileLog = FALSE;                  FileLog = FALSE;
700                  if (! CreateBinBuf())                  if (! CreateBinBuf())
701                  {                  {
                         FileTransEnd_();  
702                          return FALSE;                          return FALSE;
703                  }                  }
704          }          }
# Line 677  static BOOL LogStart(const wchar_t *fnam Line 707  static BOOL LogStart(const wchar_t *fnam
707                  FileLog = TRUE;                  FileLog = TRUE;
708                  if (! CreateLogBuf())                  if (! CreateLogBuf())
709                  {                  {
                         FileTransEnd_();  
710                          return FALSE;                          return FALSE;
711                  }                  }
712          }          }
713          cv.LStart = cv.LogPtr;          cv.LStart = cv.LogPtr;
714          cv.LCount = 0;          cv.LCount = 0;
715    
716          /* 2007.05.24 Gentaro */          OpenLogFile(fv);
717          eLineEnd = Line_LineHead;          if (LogVar->FileHandle == INVALID_HANDLE_VALUE) {
718                    return FALSE;
719            }
720    
721            /* 2007.05.24 Gentaro */
722            fv->eLineEnd = Line_LineHead;
723          if (ts.Append > 0)          if (ts.Append > 0)
724          {          {
725                  int dwShareMode = FILE_SHARE_READ;                  SetFilePointer(LogVar->FileHandle, 0, NULL, FILE_END);
726                  if (!ts.LogLockExclusive) {                  /* 2007.05.24 Gentaro
727                          dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;                     If log file already exists,
728                  }                     a newline is inserted before the first timestamp.
729                  LogVar->FileHandle = _CreateFileW(LogVar->FullName, GENERIC_WRITE, dwShareMode, NULL,                  */
730                                                                                    OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);                  fv->eLineEnd = Line_FileHead;
                 if (LogVar->FileHandle != INVALID_HANDLE_VALUE){  
                         SetFilePointer(LogVar->FileHandle, 0, NULL, FILE_END);  
                         /* 2007.05.24 Gentaro  
                                 If log file already exists,  
                                 a newline is inserted before the first timestamp.  
                         */  
                         eLineEnd = Line_FileHead;  
                 }  
731          }          }
         else {  
                 int dwShareMode = FILE_SHARE_READ;  
                 if (!ts.LogLockExclusive) {  
                         dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;  
                 }  
                 LogVar->FileHandle = _CreateFileW(LogVar->FullName, GENERIC_WRITE, dwShareMode, NULL,  
                                                                                   CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);  
         }  
         LogVar->FileOpen = (LogVar->FileHandle != INVALID_HANDLE_VALUE);  
         if (! LogVar->FileOpen)  
         {  
                 FileTransEnd_();  
                 return FALSE;  
         }  
         LogVar->ByteCount = 0;  
732    
733          // Log rotate configuration          // Log rotate configuration
734          LogVar->RotateMode = ts.LogRotate;          LogVar->RotateMode = ts.LogRotate;
# Line 730  static BOOL LogStart(const wchar_t *fnam Line 740  static BOOL LogStart(const wchar_t *fnam
740          // (2016.4.9 yutaka)          // (2016.4.9 yutaka)
741          if (LogVar->RotateMode != ROTATE_NONE) {          if (LogVar->RotateMode != ROTATE_NONE) {
742                  DWORD size = GetFileSize(LogVar->FileHandle, NULL);                  DWORD size = GetFileSize(LogVar->FileHandle, NULL);
743                  if (size != -1)                  if (size == -1) {
744                          LogVar->ByteCount = size;                          return FALSE;
745                    }
746                    LogVar->ByteCount = size;
747            }
748            else {
749                    LogVar->ByteCount = 0;
750          }          }
751    
752          if (! OpenFTDlg_(LogVar)) {          if (! OpenFTDlg_(LogVar)) {
                 FileTransEnd_();  
753                  return FALSE;                  return FALSE;
754          }          }
755    
756          LogVar->IsPause = FALSE;          LogVar->IsPause = FALSE;
757          LogVar->StartTime = GetTickCount();          LogVar->StartTime = GetTickCount();
758    
759          // 遅延書き込み用スレッドを起こす。          if (ts.DeferredLogWriteMode) {
760          // (2013.4.19 yutaka)                  StartThread(LogVar);
         // DeferredLogWriteThread スレッドが起床して、スレッドキューが作成されるより前に、  
         // ログファイルのクローズ(CloseFileSync)が行われると、エンキューが失敗し、デッドロック  
         // するという問題を修正した。  
         // スレッド間の同期を行うため、名前なしイベントオブジェクトを使って、スレッドキューの  
         // 作成まで待ち合わせするようにした。名前付きイベントオブジェクトを使う場合は、  
         // システム(Windows OS)上でユニークな名前にする必要がある。  
         // (2016.9.23 yutaka)  
         LogVar->LogThreadEvent = CreateEvent(NULL, TRUE, FALSE, NULL);  
         LogVar->LogThread = (HANDLE)_beginthreadex(NULL, 0, DeferredLogWriteThread, LogVar, 0, &tid);  
         LogVar->LogThreadId = tid;  
         if (LogVar->LogThreadEvent != NULL) {  
                 WaitForSingleObject(LogVar->LogThreadEvent, INFINITE);  
                 CloseHandle(LogVar->LogThreadEvent);  
761          }          }
762    
763          // 現在バッファにあるデータをすべて書き出してから、          // 現在バッファにあるデータをすべて書き出してから、
# Line 863  static void CommentLogToFile(char *buf, Line 864  static void CommentLogToFile(char *buf,
864  {  {
865          DWORD wrote;          DWORD wrote;
866    
867          if (LogVar == NULL || !LogVar->FileOpen) {          if (LogVar == NULL) {
868                  char uimsg[MAX_UIMSG];                  char uimsg[MAX_UIMSG];
869                  get_lang_msg("MSG_ERROR", uimsg, sizeof(uimsg), "ERROR", ts.UILanguageFile);                  get_lang_msg("MSG_ERROR", uimsg, sizeof(uimsg), "ERROR", ts.UILanguageFile);
870                  get_lang_msg("MSG_COMMENT_LOG_OPEN_ERROR", ts.UIMsg, sizeof(ts.UIMsg),                  get_lang_msg("MSG_COMMENT_LOG_OPEN_ERROR", ts.UIMsg, sizeof(ts.UIMsg),
# Line 878  static void CommentLogToFile(char *buf, Line 879  static void CommentLogToFile(char *buf,
879          /* Set Line End Flag          /* Set Line End Flag
880                  2007.05.24 Gentaro                  2007.05.24 Gentaro
881          */          */
882          eLineEnd = Line_LineHead;          LogVar->eLineEnd = Line_LineHead;
883          logfile_unlock();          logfile_unlock();
884  }  }
885    
# Line 888  static void LogRotate(void) Line 889  static void LogRotate(void)
889  {  {
890          int loopmax = 10000;  // XXX          int loopmax = 10000;  // XXX
891          int i, k;          int i, k;
         int dwShareMode = FILE_SHARE_READ;  
         unsigned tid;  
   
         if (! LogVar->FileOpen) return;  
892    
893          if (LogVar->RotateMode == ROTATE_NONE)          if (LogVar->RotateMode == ROTATE_NONE)
894                  return;                  return;
# Line 910  static void LogRotate(void) Line 907  static void LogRotate(void)
907    
908          // いったん今のファイルをクローズして、別名のファイルをオープンする。          // いったん今のファイルをクローズして、別名のファイルをオープンする。
909          CloseFileSync(LogVar);          CloseFileSync(LogVar);
         //_lclose(LogVar->FileHandle);  
910    
911          // 世代ローテーションのステップ数の指定があるか          // 世代ローテーションのステップ数の指定があるか
912          if (LogVar->RotateStep > 0)          if (LogVar->RotateStep > 0)
# Line 921  static void LogRotate(void) Line 917  static void LogRotate(void)
917                  aswprintf(&filename, L"%s.%d", LogVar->FullName, i);                  aswprintf(&filename, L"%s.%d", LogVar->FullName, i);
918                  DWORD attr = _GetFileAttributesW(filename);                  DWORD attr = _GetFileAttributesW(filename);
919                  free(filename);                  free(filename);
920                  if ((attr != INVALID_FILE_ATTRIBUTES) && ((attr & FILE_ATTRIBUTE_DIRECTORY) == 0))                  if (attr == INVALID_FILE_ATTRIBUTES)
921                          break;                          break;
922          }          }
923          if (i > loopmax) {          if (i > loopmax) {
# Line 947  static void LogRotate(void) Line 943  static void LogRotate(void)
943          }          }
944    
945          // 再オープン          // 再オープン
946          if (!ts.LogLockExclusive) {          OpenLogFile(LogVar);
947                  dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;          if (ts.DeferredLogWriteMode) {
948          }                  StartThread(LogVar);
         LogVar->FileHandle = _CreateFileW(LogVar->FullName, GENERIC_WRITE, dwShareMode, NULL,  
                                                                           CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);  
   
         // 遅延書き込み用スレッドを起こす。  
         // (2013.4.19 yutaka)  
         // DeferredLogWriteThread スレッドが起床して、スレッドキューが作成されるより前に、  
         // ログファイルのクローズ(CloseFileSync)が行われると、エンキューが失敗し、デッドロック  
         // するという問題を修正した。  
         // スレッド間の同期を行うため、名前なしイベントオブジェクトを使って、スレッドキューの  
         // 作成まで待ち合わせするようにした。名前付きイベントオブジェクトを使う場合は、  
         // システム(Windows OS)上でユニークな名前にする必要がある。  
         // (2016.9.26 yutaka)  
         LogVar->LogThreadEvent = CreateEvent(NULL, TRUE, FALSE, NULL);  
         LogVar->LogThread = (HANDLE)_beginthreadex(NULL, 0, DeferredLogWriteThread, LogVar, 0, &tid);  
         LogVar->LogThreadId = tid;  
         if (LogVar->LogThreadEvent != NULL) {  
                 WaitForSingleObject(LogVar->LogThreadEvent, INFINITE);  
                 CloseHandle(LogVar->LogThreadEvent);  
949          }          }
950    
951          logfile_unlock();          logfile_unlock();
   
952  }  }
953    
954  /**  /**
# Line 986  static void LogToFile(void) Line 963  static void LogToFile(void)
963          DWORD WriteBufMax, WriteBufLen;          DWORD WriteBufMax, WriteBufLen;
964          CHAR tmp[128];          CHAR tmp[128];
965          DWORD wrote;          DWORD wrote;
966            PFileVar fv = LogVar;
967    
         if (! LogVar->FileOpen) return;  
968          if (FileLog)          if (FileLog)
969          {          {
970                  Buf = cv.LogBuf;                  Buf = cv.LogBuf;
# Line 1017  static void LogToFile(void) Line 994  static void LogToFile(void)
994                          if (!FLogIsPause() && (! cv.ProtoFlag))                          if (!FLogIsPause() && (! cv.ProtoFlag))
995                          {                          {
996                                  tmp[0] = 0;                                  tmp[0] = 0;
997                                  if ( ts.LogTimestamp && eLineEnd ) {                                  if ( ts.LogTimestamp && fv->eLineEnd ) {
998                                          char *strtime = NULL;                                          char *strtime = NULL;
999    
1000                                          switch (ts.LogTimestampType) {                                          switch (ts.LogTimestampType) {
# Line 1036  static void LogToFile(void) Line 1013  static void LogToFile(void)
1013                                          }                                          }
1014    
1015                                          /* 2007.05.24 Gentaro */                                          /* 2007.05.24 Gentaro */
1016                                          if( eLineEnd == Line_FileHead ){                                          if(fv->eLineEnd == Line_FileHead ){
1017                                                  strncat_s(tmp, sizeof(tmp), "\r\n", _TRUNCATE);                                                  strncat_s(tmp, sizeof(tmp), "\r\n", _TRUNCATE);
1018                                          }                                          }
1019                                          strncat_s(tmp, sizeof(tmp), "[", _TRUNCATE);                                          strncat_s(tmp, sizeof(tmp), "[", _TRUNCATE);
# Line 1046  static void LogToFile(void) Line 1023  static void LogToFile(void)
1023    
1024                                  /* 2007.05.24 Gentaro */                                  /* 2007.05.24 Gentaro */
1025                                  if( b == 0x0a ){                                  if( b == 0x0a ){
1026                                          eLineEnd = Line_LineHead; /* set endmark*/                                          fv->eLineEnd = Line_LineHead; /* set endmark*/
1027                                  }                                  }
1028                                  else {                                  else {
1029                                          eLineEnd = Line_Other; /* clear endmark*/                                          fv->eLineEnd = Line_Other; /* clear endmark*/
1030                                  }                                  }
1031    
1032                                  if (WriteBufLen >= (WriteBufMax*4/5)) {                                  if (WriteBufLen >= (WriteBufMax*4/5)) {
# Line 1072  static void LogToFile(void) Line 1049  static void LogToFile(void)
1049                  {                  {
1050                          if (!FLogIsPause() && (! cv.ProtoFlag))                          if (!FLogIsPause() && (! cv.ProtoFlag))
1051                          {                          {
1052                                  if ( ts.LogTimestamp && eLineEnd ) {                                  if ( ts.LogTimestamp && fv->eLineEnd ) {
1053                                          char *strtime = NULL;                                          char *strtime = NULL;
1054    
1055                                          switch (ts.LogTimestampType) {                                          switch (ts.LogTimestampType) {
# Line 1096  static void LogToFile(void) Line 1073  static void LogToFile(void)
1073    
1074                                  /* 2007.05.24 Gentaro */                                  /* 2007.05.24 Gentaro */
1075                                  if( b == 0x0a ){                                  if( b == 0x0a ){
1076                                          eLineEnd = Line_LineHead; /* set endmark*/                                          fv->eLineEnd = Line_LineHead; /* set endmark*/
1077                                  }                                  }
1078                                  else {                                  else {
1079                                          eLineEnd = Line_Other; /* clear endmark*/                                          fv->eLineEnd = Line_Other; /* clear endmark*/
1080                                  }                                  }
1081    
1082                                  WriteFile(LogVar->FileHandle, (PCHAR)&b, 1, &wrote, NULL);                                  WriteFile(LogVar->FileHandle, (PCHAR)&b, 1, &wrote, NULL);
# Line 1121  static void LogToFile(void) Line 1098  static void LogToFile(void)
1098                  cv.BCount = Count;                  cv.BCount = Count;
1099          }          }
1100          if (FLogIsPause() || cv.ProtoFlag) return;          if (FLogIsPause() || cv.ProtoFlag) return;
1101          if (FLogDlg!=NULL)          LogVar->FLogDlg->RefreshNum(LogVar->StartTime, LogVar->FileSize, LogVar->ByteCount);
                 FLogDlg->RefreshNum(LogVar->StartTime, LogVar->FileSize, LogVar->ByteCount);  
1102    
1103    
1104          // ログ・ローテート          // ログ・ローテート
1105          LogRotate();          LogRotate();
   
1106  }  }
1107    
1108  static BOOL CreateLogBuf(void)  static BOOL CreateLogBuf(void)
# Line 1194  static void FileTransEnd_(void) Line 1169  static void FileTransEnd_(void)
1169          cv.Log1Byte = NULL;          cv.Log1Byte = NULL;
1170          cv.Log1Bin = NULL;          cv.Log1Bin = NULL;
1171          cv.LogBinSkip = NULL;          cv.LogBinSkip = NULL;
1172          if (FLogDlg!=NULL)          PFileTransDlg FLogDlg = LogVar->FLogDlg;
1173          {          if (FLogDlg != NULL) {
1174                  FLogDlg->DestroyWindow();                  FLogDlg->DestroyWindow();
1175                  FLogDlg = NULL;                  FLogDlg = NULL;
1176          }          }
# Line 1215  void FLogPause(BOOL Pause) Line 1190  void FLogPause(BOOL Pause)
1190                  return;                  return;
1191          }          }
1192          LogVar->IsPause = Pause;          LogVar->IsPause = Pause;
1193          FLogDlg->ChangeButton(Pause);          LogVar->FLogDlg->ChangeButton(Pause);
1194  }  }
1195    
1196  /**  /**
# Line 1263  static INT_PTR CALLBACK OnCommentDlgProc Line 1238  static INT_PTR CALLBACK OnCommentDlgProc
1238                  { 0, "DLG_COMMENT_TITLE" },                  { 0, "DLG_COMMENT_TITLE" },
1239                  { IDOK, "BTN_OK" }                  { IDOK, "BTN_OK" }
1240          };          };
         char buf[256];  
1241          UINT ret;          UINT ret;
1242    
1243          switch (msg) {          switch (msg) {
# Line 1276  static INT_PTR CALLBACK OnCommentDlgProc Line 1250  static INT_PTR CALLBACK OnCommentDlgProc
1250    
1251                  case WM_COMMAND:                  case WM_COMMAND:
1252                          switch (LOWORD(wp)) {                          switch (LOWORD(wp)) {
1253                                  case IDOK:                                  case IDOK: {
1254                                            char buf[256];
1255                                          memset(buf, 0, sizeof(buf));                                          memset(buf, 0, sizeof(buf));
1256                                          ret = GetDlgItemTextA(hDlgWnd, IDC_EDIT_COMMENT, buf, sizeof(buf) - 1);                                          ret = GetDlgItemTextA(hDlgWnd, IDC_EDIT_COMMENT, buf, sizeof(buf) - 1);
1257                                          if (ret > 0) { // テキスト取得成功                                          if (ret > 0) { // テキスト取得成功
# Line 1285  static INT_PTR CALLBACK OnCommentDlgProc Line 1260  static INT_PTR CALLBACK OnCommentDlgProc
1260                                          }                                          }
1261                                          TTEndDialog(hDlgWnd, IDOK);                                          TTEndDialog(hDlgWnd, IDOK);
1262                                          break;                                          break;
1263                                    }
1264                                  default:                                  default:
1265                                          return FALSE;                                          return FALSE;
1266                          }                          }
# Line 1339  BOOL FLogOpen(const wchar_t *fname) Line 1315  BOOL FLogOpen(const wchar_t *fname)
1315          }          }
1316          LogVar = fv;          LogVar = fv;
1317          memset(fv, 0, sizeof(TFileVar));          memset(fv, 0, sizeof(TFileVar));
1318            fv->FileHandle = INVALID_HANDLE_VALUE;
1319          fv->FileOpen = FALSE;          fv->LogThread = INVALID_HANDLE_VALUE;
1320            fv->eLineEnd = Line_LineHead;
1321    
1322          ret = LogStart(fname);          ret = LogStart(fname);
1323            if (ret == FALSE) {
1324                    FileTransEnd_();
1325            }
1326    
1327          return ret;          return ret;
1328  }  }
1329    
1330  BOOL FLogIsOpend(void)  BOOL FLogIsOpend(void)
1331  {  {
         // LogVar->FileOpen  
1332          return LogVar != NULL;          return LogVar != NULL;
1333  }  }
1334    
# Line 1361  void FLogWriteStr(const char *str) Line 1341  void FLogWriteStr(const char *str)
1341                  WriteFile(LogVar->FileHandle, str, len, &wrote, NULL);                  WriteFile(LogVar->FileHandle, str, len, &wrote, NULL);
1342                  LogVar->ByteCount =                  LogVar->ByteCount =
1343                          LogVar->ByteCount + len;                          LogVar->ByteCount + len;
1344                  if (FLogDlg!=NULL)                  LogVar->FLogDlg->RefreshNum(LogVar->StartTime, LogVar->FileSize, LogVar->ByteCount);
                         FLogDlg->RefreshNum(LogVar->StartTime, LogVar->FileSize, LogVar->ByteCount);  
1345          }          }
1346  }  }
1347    
# Line 1480  void FLogWindow(int nCmdShow) Line 1459  void FLogWindow(int nCmdShow)
1459          if (LogVar == NULL) {          if (LogVar == NULL) {
1460                  return;                  return;
1461          }          }
         if (FLogDlg == NULL)  
                 return;  
1462    
1463          HWND HWndLog = FLogDlg->m_hWnd;          HWND HWndLog = LogVar->FLogDlg->m_hWnd;
1464          ShowWindow(HWndLog, nCmdShow);          ShowWindow(HWndLog, nCmdShow);
1465          if (nCmdShow == SW_RESTORE) {          if (nCmdShow == SW_RESTORE) {
1466                  // 拡張スタイル WS_EX_NOACTIVATE 状態を解除する                  // 拡張スタイル WS_EX_NOACTIVATE 状態を解除する
# Line 1496  void FLogShowDlg(void) Line 1473  void FLogShowDlg(void)
1473          if (LogVar == NULL) {          if (LogVar == NULL) {
1474                  return;                  return;
1475          }          }
1476          if (FLogDlg != NULL) {          HWND HWndLog = LogVar->FLogDlg->m_hWnd;
1477                  FLogDlg->ShowWindow(SW_SHOWNORMAL);          ShowWindow(HWndLog, SW_SHOWNORMAL);
1478                  SetForegroundWindow(FLogDlg->GetSafeHwnd());          SetForegroundWindow(HWndLog);
         }  
1479  }  }
1480    
1481  /**  /**

Legend:
Removed from v.8900  
changed lines
  Added in v.8901

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26