Module: wine Branch: master Commit: 9a82c8071d5cdbe4cba9df056dfbb2cecc103d27 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9a82c8071d5cdbe4cba9df056d...
Author: Christian Costa titan.costa@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;