[PATCH 1/2] mountmgr: Create devices and registry entries for serial ports.
Hugh McMaster
hugh.mcmaster at outlook.com
Tue Apr 18 08:00:28 CDT 2017
Hi Alex,
Just a few things I noticed.
On Monday, 17 April 2017 2:23 PM, Alex Henrie wrote:
>+ /* create registry entry */
>+ sprintfW( reg_value, reg_value_format, n );
>+ RegSetValueExW( windows_ports_key, nt_name.Buffer, 0, REG_SZ,
>+ (BYTE *)reg_value, strlenW( reg_value ) * sizeof(WCHAR) );
>+
>+ return TRUE;
>+}
You need to pass RegSetValueExW() the string length plus the null-terminating character.
>+/* find and create serial or parallel ports */
>+static void create_port_devices( DRIVER_OBJECT *driver )
>+{
>+ static const char *serial_search_paths[] = {
>+#ifdef linux
>+ "/dev/ttyS%u",
>+ "/dev/ttyUSB%u",
>+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
>+ "/dev/cuau%u",
>+#elif defined(__DragonFly__)
>+ "/dev/cuaa%u",
>+#else
>+ "",
>+#endif
>+ };
>+ static const WCHAR serialcomm_keyW[] = {'H','A','R','D','W','A','R','E','\\',
>+ 'D','E','V','I','C','E','M','A','P','\\',
>+ 'S','E','R','I','A','L','C','O','M','M',0};
>+ const char **search_paths;
>+ const WCHAR *windows_ports_key_name;
>+ char *dosdevices_path, *p;
>+ HKEY wine_ports_key = NULL, windows_ports_key = NULL;
>+ char unix_path[256];
>+ int i, j, n = 1;
>+
>+ if (!(dosdevices_path = get_dosdevices_path( &p )))
>+ return;
>+
>+ if (driver == serial_driver)
>+ {
>+ p[0] = 'c';
>+ p[1] = 'o';
>+ p[2] = 'm';
>+ search_paths = serial_search_paths;
>+ windows_ports_key_name = serialcomm_keyW;
>+ }
>+ else
>+ {
>+ /* TODO: support parallel ports */
>+ }
>+ p += 3;
>+
>+ RegOpenKeyW( HKEY_LOCAL_MACHINE, ports_keyW, &wine_ports_key );
>+ RegOpenKeyW( HKEY_LOCAL_MACHINE, windows_ports_key_name, &windows_ports_key );
Please use RegOpenKeyExW() and check for any failures from these functions.
>+ /* remove old symlinks */
>+ for (n = 1; n <= MAX_PORTS; n++)
>+ {
>+ sprintf( p, "%u", n );
>+ if (unlink( dosdevices_path ) != 0 && !errno)
>+ break;
>+ }
>+
>+ /* look for ports in the usual places */
>+ n = 1;
>+ for (i = 0; i < sizeof(search_paths)/sizeof(search_paths[0]); i++)
This won't do what you expect. sizeof(search_paths)/sizeof(search_paths[0]) is 1.
You need to pass in the number of elements in the array. Also, it's better to avoid making this calculation
during each loop.
Hugh
More information about the wine-devel
mailing list