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 10443 by zmatsuo, Thu Dec 29 16:43:20 2022 UTC revision 10444 by zmatsuo, Fri Dec 30 15:46:12 2022 UTC
# Line 162  static BOOL OpenFTDlg_(PFileVar fv) Line 162  static BOOL OpenFTDlg_(PFileVar fv)
162   *      @return 置き換えられた文字列   *      @return 置き換えられた文字列
163   *                      不要になったらfree()すること   *                      不要になったらfree()すること
164   */   */
165  wchar_t *ConvertLognameW(const TComVar *pcv, const wchar_t *src)  static wchar_t *ConvertLognameW(const TComVar *pcv, const wchar_t *src)
166  {  {
167          const TTTSet *pts = pcv->ts;          const TTTSet *pts = pcv->ts;
168          size_t dest_len = wcslen(src) + 1;          size_t dest_len = wcslen(src) + 1;
# Line 225  wchar_t *ConvertLognameW(const TComVar * Line 225  wchar_t *ConvertLognameW(const TComVar *
225                                  break;                                  break;
226                          }                          }
227    
228                          if (add_text != 0) {                          if (add_text != NULL) {
229                                  size_t l = wcslen(add_text);                                  size_t l = wcslen(add_text);
230                                  dest_len += l;                                  dest_len += l;
231                                  dest = (wchar_t *)realloc(dest, sizeof(wchar_t) * dest_len);                                  dest = (wchar_t *)realloc(dest, sizeof(wchar_t) * dest_len);
232                                  wcscpy(&dest[i], add_text);                                  wcscpy(&dest[i], add_text);
233                                    free(add_text);
234                                  i += l;                                  i += l;
235                          }                          }
236                  }                  }
# Line 242  wchar_t *ConvertLognameW(const TComVar * Line 243  wchar_t *ConvertLognameW(const TComVar *
243          return dest;          return dest;
244  }  }
245    
 /**  
  *      ファイル名文字列の置き換え ANSI版  
  */  
 static void ConvertLogname(char *c, int destlen)  
 {  
         wchar_t *cW = ToWcharA(c);  
         wchar_t *filenameW = ConvertLognameW(&cv, cW);  
         WideCharToACP_t(cW, c, destlen);  
         free(filenameW);  
         free(cW);  
 }  
   
246  static void FixLogOption(void)  static void FixLogOption(void)
247  {  {
248          if (ts.LogBinary) {          if (ts.LogBinary) {
# Line 1385  BOOL FLogOpenDialog(HINSTANCE hInst, HWN Line 1374  BOOL FLogOpenDialog(HINSTANCE hInst, HWN
1374  }  }
1375    
1376  /**  /**
1377     *      ログファイル名用の修飾を行う,ファイル名部分のみ
1378     *      - strftime() と同じ日付展開
1379     *      - 設定されたログファイルフォルダを追加
1380     *      - ホスト名,ポート番号展開
1381     *
1382     *      @param  filename        ファイル名(パスは含まない)
1383     *      @return 修飾済みファイル名
1384     */
1385    wchar_t *FLogGetLogFilenameBase(const wchar_t *filename)
1386    {
1387            // ファイル名部分を抽出
1388            wchar_t *format = ExtractFileNameW(filename);
1389            if (format == NULL) {
1390                    format = wcsdup(L"");
1391            }
1392    
1393            // strftime に使用できない文字を削除
1394            deleteInvalidStrftimeCharW(format);
1395    
1396            // 現在時刻を取得
1397            time_t time_local;
1398            time(&time_local);
1399            struct tm tm_local;
1400            localtime_s(&tm_local, &time_local);
1401    
1402            // strftime()で変換
1403            size_t len = 128;
1404            wchar_t *formated = (wchar_t*)malloc(sizeof(wchar_t) * len);
1405            size_t r = wcsftime(formated, len, format, &tm_local);
1406            if (r == 0) {
1407                    // エラーが返ってきた
1408                    wcscpy(formated, format);
1409            }
1410            free(format);
1411    
1412            // ホスト名など
1413            wchar_t *host = ConvertLognameW(&cv, formated);
1414            free(formated);
1415    
1416            // ファイル名に使用できない文字を置換
1417            //wchar_t *replaced = replaceInvalidFileNameCharW(host, 0);     // 削除
1418            wchar_t *replaced = replaceInvalidFileNameCharW(host, L'_');
1419            free(host);
1420    
1421            return replaced;
1422    }
1423    
1424    /**
1425   *      ログファイル名を取得   *      ログファイル名を取得
1426   *      ログファイル名用の修飾を行う   *      ログファイル名用の修飾を行う
1427   *      - strftime() と同じ日付展開   *      - strftime() と同じ日付展開
# Line 1399  BOOL FLogOpenDialog(HINSTANCE hInst, HWN Line 1436  BOOL FLogOpenDialog(HINSTANCE hInst, HWN
1436   */   */
1437  wchar_t *FLogGetLogFilename(const wchar_t *log_filename)  wchar_t *FLogGetLogFilename(const wchar_t *log_filename)
1438  {  {
1439          const char *logdir = ToCharW(ts.LogDefaultPathW);          wchar_t *dir;
1440            wchar_t *fname;
         // 元となるファイル名  
         char base_name[MAX_PATH];  
1441          if (log_filename == NULL) {          if (log_filename == NULL) {
1442                  strncpy_s(base_name, _countof(base_name), ts.LogDefaultName, _TRUNCATE);                  dir = wcsdup(ts.LogDefaultPathW);
1443                    fname = ToWcharA(ts.LogDefaultName);
1444                    //fname = wcsdup(ts.LogDefaultNameW);
1445            } else if (!IsRelativePathW(log_filename)) {
1446                    // 絶対パスが入力された
1447                    dir = ExtractDirNameW(log_filename);
1448                    fname = ExtractFileNameW(log_filename);
1449          }          }
1450          else {          else {
1451                  char *filenameA = ToCharW(log_filename);                  dir = wcsdup(ts.LogDefaultPathW);
1452                  strncpy_s(base_name, _countof(base_name), filenameA, _TRUNCATE);                  fname = wcsdup(log_filename);
                 free(filenameA);  
1453          }          }
1454    
1455          // フルパス化          wchar_t *formated = FLogGetLogFilenameBase(fname);
1456          char full_path[MAX_PATH];          free(fname);
1457          ConvFName(logdir, base_name, sizeof(base_name), "", full_path, sizeof(full_path));  
1458          ParseStrftimeFileName(full_path, sizeof(full_path));          // 連結する
1459          ConvertLogname(full_path, sizeof(full_path));          wchar_t *logfull = NULL;
1460            awcscats(&logfull, dir, L"\\", formated, NULL);
1461            free(dir);
1462    
1463            // 正規化
1464            wchar_t *normal;
1465            hGetFullPathNameW(logfull, &normal, NULL);
1466            free(logfull);
1467    
1468          free((void *)logdir);          return normal;
         return ToWcharA(full_path);  
1469  }  }
1470    
1471  BOOL FLogIsPause()  BOOL FLogIsPause()

Legend:
Removed from v.10443  
changed lines
  Added in v.10444

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