diff options
author | Simon Rozman <simon@rozman.si> | 2020-10-30 06:12:42 +0100 |
---|---|---|
committer | Simon Rozman <simon@rozman.si> | 2020-10-31 10:41:47 +0100 |
commit | 13e90b52ccf6f02a7035c8c985afaa486cb1628e (patch) | |
tree | e4968610ed738b594c1b5bbb5a1647c3f89bd63d /api/adapter.c | |
parent | api: use C locale for adapter and pool name case-insensitive comparing (diff) | |
download | wintun-13e90b52ccf6f02a7035c8c985afaa486cb1628e.tar.xz wintun-13e90b52ccf6f02a7035c8c985afaa486cb1628e.zip |
api: simplify RemoveNumberedSuffix()
Reported-by: Jason A. Donenfeld <Jason@zx2c4.com>
Signed-off-by: Simon Rozman <simon@rozman.si>
Diffstat (limited to 'api/adapter.c')
-rw-r--r-- | api/adapter.c | 27 |
1 files changed, 7 insertions, 20 deletions
diff --git a/api/adapter.c b/api/adapter.c index a51d437..ac1a6e0 100644 --- a/api/adapter.c +++ b/api/adapter.c @@ -421,27 +421,14 @@ GetDevInfoData(_In_ const GUID *CfgInstanceID, _Out_ HDEVINFO *DevInfo, _Out_ SP } static void -RemoveNumberedSuffix(_In_z_ const WCHAR *Name, _Out_ WCHAR *Removed) +RemoveNumberedSuffix(_Inout_z_ WCHAR *Name) { - size_t Len = wcslen(Name); - if (Len && (Name[Len - 1] < L'0' || Name[Len - 1] > L'9')) + for (size_t i = wcslen(Name); i--;) { - wmemcpy(Removed, Name, Len + 1); - return; - } - for (size_t i = Len; i--;) - { - if (Name[i] >= L'0' && Name[i] <= L'9') - continue; - if (Name[i] == L' ') - { - wmemcpy(Removed, Name, i); - Removed[i] = 0; + if ((Name[i] < L'0' || Name[i] > L'9') && !iswspace(Name[i])) return; - } - break; + Name[i] = 0; } - wmemcpy(Removed, Name, Len + 1); } static void @@ -477,8 +464,8 @@ IsPoolMember( *IsMember = TRUE; goto cleanupFriendlyName; } - RemoveNumberedSuffix(FriendlyName, FriendlyName); - RemoveNumberedSuffix(DeviceDesc, DeviceDesc); + RemoveNumberedSuffix(FriendlyName); + RemoveNumberedSuffix(DeviceDesc); if (!_wcsicmp(FriendlyName, PoolDeviceTypeName) || !_wcsicmp(DeviceDesc, PoolDeviceTypeName)) { *IsMember = TRUE; @@ -623,7 +610,7 @@ WintunGetAdapter( Name2[_countof(Name2) - 1] = 0; if (_wcsicmp(Name, Name2)) { - RemoveNumberedSuffix(Name2, Name2); + RemoveNumberedSuffix(Name2); if (_wcsicmp(Name, Name2)) continue; } |