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 9130 by zmatsuo, Sat Jan 16 05:22:12 2021 UTC revision 9196 by zmatsuo, Sat Mar 13 14:42:32 2021 UTC
# Line 2679  cleanup: Line 2679  cleanup:
2679  int WINAPI DetectComPorts(LPWORD ComPortTable, int ComPortMax, char **ComPortDesc)  int WINAPI DetectComPorts(LPWORD ComPortTable, int ComPortMax, char **ComPortDesc)
2680  {  {
2681          HMODULE h;          HMODULE h;
2682          TCHAR   devicesBuff[65535];          char   *devicesBuff;
2683          TCHAR   *p;          char   *p;
2684          int     comports = 0;          int     comports = 0;
2685          int     i, j, min;          int     i, j, min;
2686          WORD    s;          WORD    s;
2687            size_t buf_size = 65535;
2688    
2689            devicesBuff = malloc(buf_size);
2690            if (devicesBuff == NULL) {
2691                    return 0;
2692            }
2693    
2694          if (((h = GetModuleHandle("kernel32.dll")) != NULL) &&          if (((h = GetModuleHandle("kernel32.dll")) != NULL) &&
2695              (GetProcAddress(h, "QueryDosDeviceA") != NULL) &&              (GetProcAddress(h, "QueryDosDeviceA") != NULL) &&
2696              (QueryDosDevice(NULL, devicesBuff, 65535) != 0)) {              (QueryDosDevice(NULL, devicesBuff, buf_size) != 0)) {
2697                  p = devicesBuff;                  p = devicesBuff;
2698                  while (*p != '\0') {                  while (*p != '\0') {
2699                          if (strncmp(p, "COM", 3) == 0 && p[3] != '\0') {                          if (strncmp(p, "COM", 3) == 0 && p[3] != '\0') {
# Line 2728  int WINAPI DetectComPorts(LPWORD ComPort Line 2734  int WINAPI DetectComPorts(LPWORD ComPort
2734  #endif  #endif
2735          }          }
2736    
2737            free(devicesBuff);
2738    
2739          ListupSerialPort(ComPortTable, comports, ComPortDesc, ComPortMax);          ListupSerialPort(ComPortTable, comports, ComPortDesc, ComPortMax);
2740    
2741          return comports;          return comports;
# Line 2736  int WINAPI DetectComPorts(LPWORD ComPort Line 2744  int WINAPI DetectComPorts(LPWORD ComPort
2744  int WINAPI CheckComPort(WORD ComPort)  int WINAPI CheckComPort(WORD ComPort)
2745  {  {
2746          HMODULE h;          HMODULE h;
2747          TCHAR   devicesBuff[65535];          char *devicesBuff;
2748          char    com_str[64];          char    com_str[64];
2749          BOOL bRet;          BOOL bRet;
2750          GUID ClassGuid[1];          GUID ClassGuid[1];
# Line 2744  int WINAPI CheckComPort(WORD ComPort) Line 2752  int WINAPI CheckComPort(WORD ComPort)
2752          HDEVINFO DeviceInfoSet = NULL;          HDEVINFO DeviceInfoSet = NULL;
2753          SP_DEVINFO_DATA DeviceInfoData;          SP_DEVINFO_DATA DeviceInfoData;
2754          int found = 0;          int found = 0;
2755            size_t buf_size = 65535;
2756    
2757          _snprintf_s(com_str, sizeof(com_str), _TRUNCATE, "COM%d", ComPort);          _snprintf_s(com_str, sizeof(com_str), _TRUNCATE, "COM%d", ComPort);
2758    
# Line 2752  int WINAPI CheckComPort(WORD ComPort) Line 2761  int WINAPI CheckComPort(WORD ComPort)
2761                  return -1;                  return -1;
2762          }          }
2763    
2764          if (QueryDosDevice(com_str, devicesBuff, 65535) == 0) {          devicesBuff = malloc(buf_size);
2765            if (devicesBuff == NULL) {
2766                    return -1;
2767            }
2768    
2769            if (QueryDosDevice(com_str, devicesBuff, buf_size) == 0) {
2770                  DWORD err = GetLastError();                  DWORD err = GetLastError();
2771                    free(devicesBuff);
2772                  if (err == ERROR_FILE_NOT_FOUND) {                  if (err == ERROR_FILE_NOT_FOUND) {
2773                          /* NOT FOUND */                          /* NOT FOUND */
2774                          return 0;                          return 0;
# Line 2765  int WINAPI CheckComPort(WORD ComPort) Line 2780  int WINAPI CheckComPort(WORD ComPort)
2780          /* QueryDosDeviceで切断を検知できない環境があるでさらにチェック */          /* QueryDosDeviceで切断を検知できない環境があるでさらにチェック */
2781          bRet = SetupDiClassGuidsFromName(_T("PORTS"), (LPGUID) & ClassGuid, 1, &dwRequiredSize);          bRet = SetupDiClassGuidsFromName(_T("PORTS"), (LPGUID) & ClassGuid, 1, &dwRequiredSize);
2782          if (bRet == FALSE) {          if (bRet == FALSE) {
2783                    free(devicesBuff);
2784                  return -1;                  return -1;
2785          }          }
2786    
2787          DeviceInfoSet = SetupDiGetClassDevs(&ClassGuid[0], NULL, NULL, DIGCF_PRESENT | DIGCF_PROFILE);          DeviceInfoSet = SetupDiGetClassDevs(&ClassGuid[0], NULL, NULL, DIGCF_PRESENT | DIGCF_PROFILE);
2788          if (DeviceInfoSet == NULL) {          if (DeviceInfoSet == NULL) {
2789                    free(devicesBuff);
2790                  return -1;                  return -1;
2791          }          }
2792    
# Line 2799  int WINAPI CheckComPort(WORD ComPort) Line 2816  int WINAPI CheckComPort(WORD ComPort)
2816    
2817          SetupDiDestroyDeviceInfoList(DeviceInfoSet);          SetupDiDestroyDeviceInfoList(DeviceInfoSet);
2818    
2819            free(devicesBuff);
2820          return found;          return found;
2821  }  }
2822    

Legend:
Removed from v.9130  
changed lines
  Added in v.9196

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