#include "linux/serial.h"
#endif
-#include "serialport.h"
+#include "libserialport.h"
int sp_get_port_by_name(const char *portname, struct sp_port **port_ptr)
{
goto out_free_value;
}
while (
- value_len = max_value_len,
+ value_len = max_value_len + 1,
data_size = max_data_size,
RegEnumValue(key, index, value, &value_len,
NULL, &type, (LPBYTE)data, &data_size) == ERROR_SUCCESS)
CFDictionarySetValue(classes,
CFSTR(kIOSerialBSDTypeKey), CFSTR(kIOSerialBSDAllTypes));
- if (!(IOServiceGetMatchingServices(master, classes, &iter)))
+ if (IOServiceGetMatchingServices(master, classes, &iter) != KERN_SUCCESS)
{
ret = SP_ERR_FAIL;
goto out_done;
#ifdef _WIN32
DWORD desired_access = 0, flags_and_attributes = 0;
+ char *escaped_port_name;
+
+ /* Prefix port name with '\\.\' to work with ports above COM9. */
+ if (!(escaped_port_name = malloc(strlen(port->name + 5))))
+ return SP_ERR_MEM;
+ sprintf(escaped_port_name, "\\\\.\\%s", port->name);
+
/* Map 'flags' to the OS-specific settings. */
desired_access |= GENERIC_READ;
flags_and_attributes = FILE_ATTRIBUTE_NORMAL;
if (flags & SP_MODE_NONBLOCK)
flags_and_attributes |= FILE_FLAG_OVERLAPPED;
- port->hdl = CreateFile(port->name, desired_access, 0, 0,
+ port->hdl = CreateFile(escaped_port_name, desired_access, 0, 0,
OPEN_EXISTING, flags_and_attributes, 0);
+
+ free(escaped_port_name);
+
if (port->hdl == INVALID_HANDLE_VALUE)
return SP_ERR_FAIL;
#else