From 8488868187ed26f8abd057775ff3cfd2aaf7ea35 Mon Sep 17 00:00:00 2001 From: Martin Ling Date: Mon, 20 Jan 2020 01:42:00 +0000 Subject: [PATCH] windows: Handle the case where there are no serial ports at all. It's possible for the HARDWARE\DEVICEMAP\SERIALCOMM key to not exist in the registry if there are no serial ports at all and never have been, as discovered on my rather minimalist gaming machine. Handle that case gracefully and return an empty list. --- windows.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/windows.c b/windows.c index a9d0927..53c1b02 100644 --- a/windows.c +++ b/windows.c @@ -491,8 +491,12 @@ SP_PRIV enum sp_return list_ports(struct sp_port ***list) DEBUG("Opening registry key"); if ((result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("HARDWARE\\DEVICEMAP\\SERIALCOMM"), 0, KEY_QUERY_VALUE, &key)) != ERROR_SUCCESS) { - SetLastError(result); - SET_FAIL(ret, "RegOpenKeyEx() failed"); + /* It's possible for this key to not exist if there are no serial ports + * at all. In that case we're done. Return a failure for any other error. */ + if (result != ERROR_FILE_NOT_FOUND) { + SetLastError(result); + SET_FAIL(ret, "RegOpenKeyEx() failed"); + } goto out_done; } DEBUG("Querying registry key value and data sizes");