Module: wine
Branch: master
Commit: 9a82c8071d5cdbe4cba9df056dfbb2cecc103d27
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9a82c8071d5cdbe4cba9df056…
Author: Christian Costa <titan.costa(a)wanadoo.fr>
Date: Mon Aug 18 17:26:48 2008 +0200
winealsa.drv: Improve midi port names.
---
dlls/winealsa.drv/midi.c | 26 ++++++++++++++++++++++++--
1 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/dlls/winealsa.drv/midi.c b/dlls/winealsa.drv/midi.c
index 3e791d5..7c51d34 100644
--- a/dlls/winealsa.drv/midi.c
+++ b/dlls/winealsa.drv/midi.c
@@ -1115,6 +1115,8 @@ static DWORD modReset(WORD wDevID)
*/
static void ALSA_AddMidiPort(snd_seq_client_info_t* cinfo, snd_seq_port_info_t* pinfo, int cap, int type)
{
+ char midiPortName[MAXPNAMELEN];
+
if (cap & SND_SEQ_PORT_CAP_WRITE) {
TRACE("OUT (%d:%s:%s:%d:%s:%x)\n",snd_seq_client_info_get_client(cinfo),
snd_seq_client_info_get_name(cinfo),
@@ -1146,7 +1148,17 @@ static void ALSA_AddMidiPort(snd_seq_client_info_t* cinfo, snd_seq_port_info_t*
* not MIDICAPS_CACHE.
*/
MidiOutDev[MODM_NumDevs].caps.dwSupport = MIDICAPS_VOLUME|MIDICAPS_LRVOLUME;
- MultiByteToWideChar(CP_ACP, 0, snd_seq_client_info_get_name(cinfo), -1,
+
+ /* Try to use both client and port names, if this is too long take the port name only.
+ In the second case the port name should be explicit enough due to its big size.
+ */
+ if ( (strlen(snd_seq_client_info_get_name(cinfo)) + strlen(snd_seq_port_info_get_name(pinfo)) + 3) < MAXPNAMELEN ) {
+ sprintf(midiPortName, "%s - %s", snd_seq_client_info_get_name(cinfo), snd_seq_port_info_get_name(pinfo));
+ } else {
+ lstrcpynA(midiPortName, snd_seq_port_info_get_name(pinfo), MAXPNAMELEN-1);
+ midiPortName[MAXPNAMELEN-1] = 0;
+ }
+ MultiByteToWideChar(CP_ACP, 0, midiPortName, -1,
MidiOutDev[MODM_NumDevs].caps.szPname,
sizeof(MidiOutDev[MODM_NumDevs].caps.szPname) / sizeof(WCHAR));
@@ -1201,7 +1213,17 @@ static void ALSA_AddMidiPort(snd_seq_client_info_t* cinfo, snd_seq_port_info_t*
* not MIDICAPS_CACHE.
*/
MidiInDev[MIDM_NumDevs].caps.dwSupport = MIDICAPS_VOLUME|MIDICAPS_LRVOLUME;
- MultiByteToWideChar(CP_ACP, 0, snd_seq_client_info_get_name(cinfo), -1,
+
+ /* Try to use both client and port names, if this is too long take the port name only.
+ In the second case the port name should be explicit enough due to its big size.
+ */
+ if ( (strlen(snd_seq_client_info_get_name(cinfo)) + strlen(snd_seq_port_info_get_name(pinfo)) + 3) < MAXPNAMELEN ) {
+ sprintf(midiPortName, "%s - %s", snd_seq_client_info_get_name(cinfo), snd_seq_port_info_get_name(pinfo));
+ } else {
+ lstrcpynA(midiPortName, snd_seq_port_info_get_name(pinfo), MAXPNAMELEN-1);
+ midiPortName[MAXPNAMELEN-1] = 0;
+ }
+ MultiByteToWideChar(CP_ACP, 0, midiPortName, -1,
MidiInDev[MIDM_NumDevs].caps.szPname,
sizeof(MidiInDev[MIDM_NumDevs].caps.szPname) / sizeof(WCHAR));
MidiInDev[MIDM_NumDevs].state = 0;