Develop and Download Open Source Software

Browse Subversion Repository

Diff of /trunk/teraterm/ttpcmn/ttcmn.c

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

revision 7303 by doda, Wed Jul 26 03:47:58 2017 UTC revision 7304 by zmatsuo, Sun Dec 2 15:51:37 2018 UTC
# Line 49  Line 49 
49  #include "compat_w95.h"  #include "compat_w95.h"
50  #include "tt_res.h"  #include "tt_res.h"
51    
52    // TMap を格納するファイルマッピングオブジェクト(共有メモリ)の名前
53    // TMap(とそのメンバ)の更新時は旧バージョンとの同時起動の為に変える必要があるが
54    // 連番からバージョン番号を使うように変更した為、通常は手動で変更する必要は無い
55    #define TT_FILEMAPNAME "ttset_memfilemap_" TT_VERSION_STR("_")
56    
57  /* first instance flag */  /* first instance flag */
58  static BOOL FirstInstance = TRUE;  static BOOL FirstInstance = TRUE;
59    
# Line 2546  void PASCAL NotifyMessage(PComVar cv, ch Line 2551  void PASCAL NotifyMessage(PComVar cv, ch
2551          return;          return;
2552  }  }
2553    
2554    /*
2555     *      @return         エラーが有る場合 FALSE
2556     *      @param[in]      BOOL first_instance
2557     */
2558    static BOOL OpenSharedMemory(BOOL *first_instance_)
2559    {
2560            int i;
2561            HMap = NULL;
2562            pm = NULL;
2563            for (i = 0; i < 100; i++) {
2564                    char tmp[32];
2565                    HANDLE hMap;
2566                    BOOL first_instance;
2567                    _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, i == 0 ? "%s" : "%s_%d", TT_FILEMAPNAME, i);
2568                    hMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,
2569                                                                     0, sizeof(TMap), tmp);
2570                    if (hMap == NULL) {
2571                            return FALSE;
2572                    }
2573    
2574                    first_instance = (GetLastError() != ERROR_ALREADY_EXISTS);
2575    
2576                    TMap *map = (TMap *)MapViewOfFile(hMap,FILE_MAP_WRITE,0,0,0);
2577                    if (map == NULL) {
2578                            return FALSE;
2579                    }
2580    
2581                    if (first_instance ||
2582                            (map->size_tmap == sizeof(TMap) &&
2583                             map->size_tttset == sizeof(TTTSet)))
2584                    {
2585                            map->size_tmap = sizeof(TMap);
2586                            map->size_tttset = sizeof(TTTSet);
2587                            HMap = hMap;
2588                            pm = map;
2589                            *first_instance_ = first_instance;
2590                            return TRUE;
2591                    }
2592    
2593                    // next try
2594                    UnmapViewOfFile(map);
2595                    CloseHandle(hMap);
2596            }
2597            return FALSE;
2598    }
2599    
2600  BOOL WINAPI DllMain(HANDLE hInstance,  BOOL WINAPI DllMain(HANDLE hInstance,
2601                      ULONG ul_reason_for_call,                      ULONG ul_reason_for_call,
2602                      LPVOID lpReserved)                      LPVOID lpReserved)
# Line 2561  BOOL WINAPI DllMain(HANDLE hInstance, Line 2612  BOOL WINAPI DllMain(HANDLE hInstance,
2612                          /* do process initialization */                          /* do process initialization */
2613                          DoCover_IsDebuggerPresent();                          DoCover_IsDebuggerPresent();
2614                          hInst = hInstance;                          hInst = hInstance;
2615                          HMap = CreateFileMapping((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE,                          if (OpenSharedMemory(&FirstInstance) == FALSE) {
2616                                                   0, sizeof(TMap), TT_FILEMAPNAME);                                  // dllロード失敗、teratermが起動しない
                         if (HMap == NULL) {  
                                 return FALSE;  
                         }  
                         FirstInstance = (GetLastError() != ERROR_ALREADY_EXISTS);  
   
                         pm = (PMap)MapViewOfFile(HMap,FILE_MAP_WRITE,0,0,0);  
                         if (pm == NULL) {  
2617                                  return FALSE;                                  return FALSE;
2618                          }                          }
2619                          break;                          break;

Legend:
Removed from v.7303  
changed lines
  Added in v.7304

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