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 10442 by zmatsuo, Wed Aug 17 15:10:55 2022 UTC revision 10443 by zmatsuo, Thu Dec 29 16:43:20 2022 UTC
# Line 151  static BOOL OpenFTDlg_(PFileVar fv) Line 151  static BOOL OpenFTDlg_(PFileVar fv)
151  }  }
152    
153  /**  /**
154   *      ファイル名文字列の置き換え   *      ファイル名文字列の置き換え,ログ用
155   *              &h      ホスト名に置換 (2007.5.14)   *      次の文字を置き換える
156   *              &p      TCPポート番号に置換 (2009.6.12)   *              &h      ホスト名に置換
157     *              &p      TCPポート番号に置換
158   *              &u      ログオン中のユーザ名   *              &u      ログオン中のユーザ名
159     *
160     *      @param  pcv
161     *      @param  src     置き換える前の文字列(ファイル名)
162     *      @return 置き換えられた文字列
163     *                      不要になったらfree()すること
164   */   */
165  static void ConvertLogname(char *c, int destlen)  wchar_t *ConvertLognameW(const TComVar *pcv, const wchar_t *src)
166  {  {
167          char buf[MAXPATHLEN], buf2[MAXPATHLEN], *p = c;          const TTTSet *pts = pcv->ts;
168          char tmphost[1024];          size_t dest_len = wcslen(src) + 1;
169          char tmpuser[256+1];          wchar_t *dest = (wchar_t *)malloc(sizeof(wchar_t) * dest_len);
170          DWORD len_user = sizeof(tmpuser);  
171            const wchar_t *s = src;
172          memset(buf, 0, sizeof(buf));          size_t i = 0;
173    
174          while(*p != '\0') {          while(*s != '\0') {
175                  if (*p == '&' && *(p+1) != '\0') {                  if (*s == '&' && *(s+1) != '\0') {
176                          switch (*(p+1)) {                          wchar_t c = *(s+1);
177                            case 'h':                          wchar_t *add_text = NULL;
178                                  if (cv.Open) {                          switch (c) {
179                                          if (cv.PortType == IdTCPIP) {                          case 'h':
180                                                  // ホスト名がIPv6アドレスだと、ファイル名に使用できない文字が入るため、                                  s += 2;
181                                                  // 余計な文字は削除する。                                  if (pcv->Open) {
182                                                  // (2013.3.9 yutaka)                                          switch(pcv->PortType) {
183                                                  strncpy_s(tmphost, sizeof(tmphost), ts.HostName, _TRUNCATE);                                          case IdTCPIP: {
184                                                  //strncpy_s(tmphost, sizeof(tmphost), "2001:0db8:bd05:01d2:288a:1fc0:0001:10ee", _TRUNCATE);                                                  // ホスト名がIPv6アドレスだと、ファイル名に使用できない文字(:)が入るため置換
185                                                  replaceInvalidFileNameChar(tmphost, '_');                                                  wchar_t *host = ToWcharA(pts->HostName);
186                                                  strncat_s(buf,sizeof(buf), tmphost, _TRUNCATE);                                                  wchar_t *host_fix = replaceInvalidFileNameCharW(host, '_');
187                                                    free(host);
188                                                    add_text = host_fix;
189                                                    break;
190                                            }
191                                            case IdSerial: {
192                                                    wchar_t *port;
193                                                    aswprintf(&port, L"COM%d", ts.ComPort);
194                                                    add_text = port;
195                                                    break;
196                                          }                                          }
197                                          else if (cv.PortType == IdSerial) {                                          default:
198                                                  strncpy_s(buf2,sizeof(buf2),buf,_TRUNCATE);                                                  ;
                                                 _snprintf_s(buf, sizeof(buf), _TRUNCATE, "%sCOM%d", buf2, ts.ComPort);  
199                                          }                                          }
200                                  }                                  }
201                                  break;                                  break;
202                            case 'p':                          case 'p':
203                                  if (cv.Open) {                                  s += 2;
204                                          if (cv.PortType == IdTCPIP) {                                  if (pcv->Open) {
205                                                  char port[6];                                          if (pcv->PortType == IdTCPIP) {
206                                                  _snprintf_s(port, sizeof(port), _TRUNCATE, "%d", ts.TCPPort);                                                  wchar_t *port;
207                                                  strncat_s(buf,sizeof(buf),port,_TRUNCATE);                                                  aswprintf(&port, L"%d", ts.TCPPort);
208                                                    add_text = port;
209                                          }                                          }
210                                  }                                  }
211                                  break;                                  break;
212                            case 'u':                          case 'u': {
213                                  if (GetUserName(tmpuser, &len_user) != 0) {                                  s += 2;
214                                          strncat_s(buf,sizeof(buf),tmpuser,_TRUNCATE);                                  wchar_t user[256 + 1];  // 256=UNLEN
215                                    DWORD l = _countof(user);
216                                    if (GetUserNameW(user, &l) != 0) {
217                                            add_text = wcsdup(user);
218                                  }                                  }
219                                  break;                                  break;
                           default:  
                                 strncpy_s(buf2,sizeof(buf2),p,2);  
                                 strncat_s(buf,sizeof(buf),buf2,_TRUNCATE);  
220                          }                          }
221                          p++;                          default:
222                                    // pass '&'
223                                    s++;
224                                    add_text = NULL;
225                                    break;
226                            }
227    
228                            if (add_text != 0) {
229                                    size_t l = wcslen(add_text);
230                                    dest_len += l;
231                                    dest = (wchar_t *)realloc(dest, sizeof(wchar_t) * dest_len);
232                                    wcscpy(&dest[i], add_text);
233                                    i += l;
234                            }
235                  }                  }
236                  else {                  else {
237                          strncpy_s(buf2,sizeof(buf2),p,1);                          dest[i] = *s++;
238                          strncat_s(buf,sizeof(buf),buf2,_TRUNCATE);                          i++;
239                  }                  }
                 p++;  
240          }          }
241          strncpy_s(c, destlen, buf, _TRUNCATE);          dest[i] = 0;
242            return dest;
243    }
244    
245    /**
246     *      ファイル名文字列の置き換え ANSI版
247     */
248    static void ConvertLogname(char *c, int destlen)
249    {
250            wchar_t *cW = ToWcharA(c);
251            wchar_t *filenameW = ConvertLognameW(&cv, cW);
252            WideCharToACP_t(cW, c, destlen);
253            free(filenameW);
254            free(cW);
255  }  }
256    
257  static void FixLogOption(void)  static void FixLogOption(void)
# Line 397  typedef struct { Line 437  typedef struct {
437    
438  /*  /*
439   * Log ダイアログのうち、Enable/Disable が変化するコントロール   * Log ダイアログのうち、Enable/Disable が変化するコントロール
440   *   *
441   * - Append   * - Append
442   *   指定されたファイルが存在する場合は Enable   *   指定されたファイルが存在する場合は Enable
443   *   指定されたファイルが存在しない場合は Disable   *   指定されたファイルが存在しない場合は Disable
444   *   *
445   * - BOM, Encoding   * - BOM, Encoding
446   *   Text かつ New/Overwrite の場合に Enable   *   Text かつ New/Overwrite の場合に Enable
447   *   そうでない場合に Disable   *   そうでない場合に Disable
448   *   BOM はファイルの先頭から書き込むときしか意味がない   *   BOM はファイルの先頭から書き込むときしか意味がない
449   *   Encoding は追記でも意味があるが、既存ファイルのエンコーディングを   *   Encoding は追記でも意味があるが、既存ファイルのエンコーディングを
450   *   強制的にダイアログに反映するので、ユーザによる指定はさせない   *   強制的にダイアログに反映するので、ユーザによる指定はさせない
451   *   *
452   * - Plain Text, Timestamp, Timestamp 種別   * - Plain Text, Timestamp, Timestamp 種別
453   *   Text の場合は Enable   *   Text の場合は Enable
454   *   Binary の場合は Disable   *   Binary の場合は Disable
455   *   *
456   * - Timestamp 種別   * - Timestamp 種別
457   *   Timestamp=on の場合は Enable   *   Timestamp=on の場合は Enable
458   *   Timestamp=off の場合は Disable   *   Timestamp=off の場合は Disable

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

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