Compare commits

...

2 Commits

Author SHA1 Message Date
bol-van
5ff3172991 winws: optimize network list search 2024-07-13 19:06:16 +03:00
bol-van
1b65220878 winws: optimize network list search 2024-07-13 19:04:10 +03:00
3 changed files with 12 additions and 18 deletions

Binary file not shown.

View File

@ -977,7 +977,7 @@ static bool str2guid(const char* str, GUID *guid)
{ {
unsigned int u[11],k; unsigned int u[11],k;
if (11 != sscanf(str, "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", u+0, u+1, u+2, u+3, u+4, u+5, u+6, u+7, u+8, u+9, u+10)) if (36 != strlen(str) || 11 != sscanf(str, "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", u+0, u+1, u+2, u+3, u+4, u+5, u+6, u+7, u+8, u+9, u+10))
return false; return false;
guid->Data1 = u[0]; guid->Data1 = u[0];
if ((u[1] & 0xFFFF0000) || (u[2] & 0xFFFF0000)) return false; if ((u[1] & 0xFFFF0000) || (u[2] & 0xFFFF0000)) return false;
@ -1110,10 +1110,9 @@ static bool nlm_filter_match(const struct str_list_head *nlm_list)
bool bRet = true, bMatch = false; bool bRet = true, bMatch = false;
IEnumNetworks* pEnum; IEnumNetworks* pEnum;
if (SUCCEEDED(w_win32_error = pNetworkListManager->lpVtbl->GetNetworks(pNetworkListManager, NLM_ENUM_NETWORK_ALL, &pEnum))) if (SUCCEEDED(w_win32_error = pNetworkListManager->lpVtbl->GetNetworks(pNetworkListManager, NLM_ENUM_NETWORK_CONNECTED, &pEnum)))
{ {
INetwork* pNet; INetwork* pNet;
VARIANT_BOOL bIsConnected;
GUID idNet,g; GUID idNet,g;
BSTR bstrName; BSTR bstrName;
char Name[128]; char Name[128];
@ -1126,26 +1125,21 @@ static bool nlm_filter_match(const struct str_list_head *nlm_list)
break; break;
} }
if (!pNet) break; if (!pNet) break;
if (SUCCEEDED(w_win32_error = pNet->lpVtbl->get_IsConnected(pNet, &bIsConnected)) && if (SUCCEEDED(w_win32_error = pNet->lpVtbl->GetNetworkId(pNet, &idNet)) &&
SUCCEEDED(w_win32_error = pNet->lpVtbl->GetNetworkId(pNet, &idNet)) &&
SUCCEEDED(w_win32_error = pNet->lpVtbl->GetName(pNet, &bstrName))) SUCCEEDED(w_win32_error = pNet->lpVtbl->GetName(pNet, &bstrName)))
{ {
if (bIsConnected) if (WideCharToMultiByte(CP_UTF8, 0, bstrName, -1, Name, sizeof(Name), NULL, NULL))
{ {
if (WideCharToMultiByte(CP_UTF8, 0, bstrName, -1, Name, sizeof(Name), NULL, NULL)) LIST_FOREACH(nlm, nlm_list, next)
{ {
LIST_FOREACH(nlm, nlm_list, next) bMatch = !strcmp(Name,nlm->str) || str2guid(nlm->str,&g) && !memcmp(&idNet,&g,sizeof(GUID));
{ if (bMatch) break;
bMatch = !strcmp(Name,nlm->str) || str2guid(nlm->str,&g) && !memcmp(&idNet,&g,sizeof(GUID));
if (bMatch) break;
}
} }
else }
{ else
w_win32_error = HRESULT_FROM_WIN32(GetLastError()); {
bRet = false; w_win32_error = HRESULT_FROM_WIN32(GetLastError());
} bRet = false;
} }
SysFreeString(bstrName); SysFreeString(bstrName);
} }