Index: base/applications/mplay32/lang/bg-BG.rc =================================================================== --- base/applications/mplay32/lang/bg-BG.rc (revision 64082) +++ base/applications/mplay32/lang/bg-BG.rc (working copy) @@ -47,7 +47,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Всички поддържани (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Всички поддържани" IDS_TOOLTIP_PLAY "Пускане" IDS_TOOLTIP_STOP "Спиране" IDS_TOOLTIP_EJECT "Изваждане" Index: base/applications/mplay32/lang/cs-CZ.rc =================================================================== --- base/applications/mplay32/lang/cs-CZ.rc (revision 64082) +++ base/applications/mplay32/lang/cs-CZ.rc (working copy) @@ -48,7 +48,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Všechny podporované (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Všechny podporované" IDS_TOOLTIP_PLAY "Přehrát" IDS_TOOLTIP_STOP "Zastavit" IDS_TOOLTIP_EJECT "Vysunout" Index: base/applications/mplay32/lang/de-DE.rc =================================================================== --- base/applications/mplay32/lang/de-DE.rc (revision 64082) +++ base/applications/mplay32/lang/de-DE.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Alle unterstützten (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Alle unterstützten" IDS_TOOLTIP_PLAY "Wiedergabe" IDS_TOOLTIP_STOP "Stopp" IDS_TOOLTIP_EJECT "Auswerfen" Index: base/applications/mplay32/lang/en-US.rc =================================================================== --- base/applications/mplay32/lang/en-US.rc (revision 64082) +++ base/applications/mplay32/lang/en-US.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "All Supported (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "All Supported" IDS_TOOLTIP_PLAY "Play" IDS_TOOLTIP_STOP "Stop" IDS_TOOLTIP_EJECT "Eject" Index: base/applications/mplay32/lang/es-ES.rc =================================================================== --- base/applications/mplay32/lang/es-ES.rc (revision 64082) +++ base/applications/mplay32/lang/es-ES.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Todos los ficheros soportados (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Todos los ficheros soportados" IDS_TOOLTIP_PLAY "Reproducir" IDS_TOOLTIP_STOP "Detener" IDS_TOOLTIP_EJECT "Expulsar" Index: base/applications/mplay32/lang/fr-FR.rc =================================================================== --- base/applications/mplay32/lang/fr-FR.rc (revision 64082) +++ base/applications/mplay32/lang/fr-FR.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Tous les types supportés (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Tous les types supportés" IDS_TOOLTIP_PLAY "Lecture" IDS_TOOLTIP_STOP "Stop" IDS_TOOLTIP_EJECT "Éjecter" Index: base/applications/mplay32/lang/he-IL.rc =================================================================== --- base/applications/mplay32/lang/he-IL.rc (revision 64082) +++ base/applications/mplay32/lang/he-IL.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "כל הקבצים הנתמכים (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "כל הקבצים הנתמכים" IDS_TOOLTIP_PLAY "נגן" IDS_TOOLTIP_STOP "עצור" IDS_TOOLTIP_EJECT "הוצא" Index: base/applications/mplay32/lang/it-IT.rc =================================================================== --- base/applications/mplay32/lang/it-IT.rc (revision 64082) +++ base/applications/mplay32/lang/it-IT.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Tutti i tipi supportati (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Tutti i tipi supportati" IDS_TOOLTIP_PLAY "Riproduci" IDS_TOOLTIP_STOP "Interrompi" IDS_TOOLTIP_EJECT "Espelli" Index: base/applications/mplay32/lang/ja-JP.rc =================================================================== --- base/applications/mplay32/lang/ja-JP.rc (revision 64082) +++ base/applications/mplay32/lang/ja-JP.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "すべてのサポートされたファイル (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "すべてのサポートされたファイル" IDS_TOOLTIP_PLAY "再生" IDS_TOOLTIP_STOP "停止" IDS_TOOLTIP_EJECT "取り出し" Index: base/applications/mplay32/lang/nl-NL.rc =================================================================== --- base/applications/mplay32/lang/nl-NL.rc (revision 64082) +++ base/applications/mplay32/lang/nl-NL.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Mediabestanden (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Mediabestanden" IDS_TOOLTIP_PLAY "Afspelen" IDS_TOOLTIP_STOP "Stoppen" IDS_TOOLTIP_EJECT "Uitwerpen" Index: base/applications/mplay32/lang/no-NO.rc =================================================================== --- base/applications/mplay32/lang/no-NO.rc (revision 64082) +++ base/applications/mplay32/lang/no-NO.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Alle kompaktible filer (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Alle kompaktible filer" IDS_TOOLTIP_PLAY "Spill av" IDS_TOOLTIP_STOP "Stopp" IDS_TOOLTIP_EJECT "Løs ut" Index: base/applications/mplay32/lang/pl-PL.rc =================================================================== --- base/applications/mplay32/lang/pl-PL.rc (revision 64082) +++ base/applications/mplay32/lang/pl-PL.rc (working copy) @@ -51,7 +51,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Wszystkie formaty (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Wszystkie formaty" IDS_TOOLTIP_PLAY "Odtwarzaj" IDS_TOOLTIP_STOP "Zatrzymaj" IDS_TOOLTIP_EJECT "Wysuń" Index: base/applications/mplay32/lang/pt-BR.rc =================================================================== --- base/applications/mplay32/lang/pt-BR.rc (revision 64082) +++ base/applications/mplay32/lang/pt-BR.rc (working copy) @@ -45,7 +45,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Todos os formatos (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Todos os formatos" IDS_TOOLTIP_PLAY "Executar" IDS_TOOLTIP_STOP "Pausar" IDS_TOOLTIP_EJECT "Ejetar" Index: base/applications/mplay32/lang/ro-RO.rc =================================================================== --- base/applications/mplay32/lang/ro-RO.rc (revision 64082) +++ base/applications/mplay32/lang/ro-RO.rc (working copy) @@ -49,7 +49,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Toate admisibile (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Toate admisibile" IDS_TOOLTIP_PLAY "Redare conținut multimedia" IDS_TOOLTIP_STOP "Oprirea lecturii" IDS_TOOLTIP_EJECT "Scoate" Index: base/applications/mplay32/lang/ru-RU.rc =================================================================== --- base/applications/mplay32/lang/ru-RU.rc (revision 64082) +++ base/applications/mplay32/lang/ru-RU.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Все поддерживаемые (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Все поддерживаемые" IDS_TOOLTIP_PLAY "Воспроизведение" IDS_TOOLTIP_STOP "Остановить" IDS_TOOLTIP_EJECT "Извлечь" Index: base/applications/mplay32/lang/sk-SK.rc =================================================================== --- base/applications/mplay32/lang/sk-SK.rc (revision 64082) +++ base/applications/mplay32/lang/sk-SK.rc (working copy) @@ -48,7 +48,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Všetky podporované (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Všetky podporované" IDS_TOOLTIP_PLAY "Prehrať" IDS_TOOLTIP_STOP "Zastaviť" IDS_TOOLTIP_EJECT "Vysunúť" Index: base/applications/mplay32/lang/sq-AL.rc =================================================================== --- base/applications/mplay32/lang/sq-AL.rc (revision 64082) +++ base/applications/mplay32/lang/sq-AL.rc (working copy) @@ -47,7 +47,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Të gjith suportimet (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Të gjith suportimet" IDS_TOOLTIP_PLAY "Fillo" IDS_TOOLTIP_STOP "Ndalo" IDS_TOOLTIP_EJECT "Nxjerr" Index: base/applications/mplay32/lang/sv-SE.rc =================================================================== --- base/applications/mplay32/lang/sv-SE.rc (revision 64082) +++ base/applications/mplay32/lang/sv-SE.rc (working copy) @@ -50,7 +50,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Alla kompaktibla filer (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Alla kompaktibla filer" IDS_TOOLTIP_PLAY "Spela upp" IDS_TOOLTIP_STOP "Stopp" IDS_TOOLTIP_EJECT "Mata ut" Index: base/applications/mplay32/lang/tr-TR.rc =================================================================== --- base/applications/mplay32/lang/tr-TR.rc (revision 64082) +++ base/applications/mplay32/lang/tr-TR.rc (working copy) @@ -45,7 +45,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Desteklenen Kütükler (*.wav, *.cda, *.mid, *.midi, *.avi)\0*.wav;*.cda;*.mid;*.midi;*.avi\0" + IDS_ALL_TYPES_FILTER "Desteklenen Kütükler" IDS_TOOLTIP_PLAY "Çal" IDS_TOOLTIP_STOP "Durdur" IDS_TOOLTIP_EJECT "Çıkart" Index: base/applications/mplay32/lang/uk-UA.rc =================================================================== --- base/applications/mplay32/lang/uk-UA.rc (revision 64082) +++ base/applications/mplay32/lang/uk-UA.rc (working copy) @@ -51,7 +51,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Всі підтримувані (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Всі підтримувані" IDS_TOOLTIP_PLAY "Відтворення" IDS_TOOLTIP_STOP "Зупинити" IDS_TOOLTIP_EJECT "Витягти" Index: base/applications/mplay32/lang/zh-CN.rc =================================================================== --- base/applications/mplay32/lang/zh-CN.rc (revision 64082) +++ base/applications/mplay32/lang/zh-CN.rc (working copy) @@ -45,7 +45,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "所有支持的格式 (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "所有支持的格式" IDS_TOOLTIP_PLAY "播放" IDS_TOOLTIP_STOP "停止" IDS_TOOLTIP_EJECT "弹出" Index: base/applications/mplay32/lang/zh-TW.rc =================================================================== --- base/applications/mplay32/lang/zh-TW.rc (revision 64082) +++ base/applications/mplay32/lang/zh-TW.rc (working copy) @@ -51,7 +51,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "所有支援格式 (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "所有支援格式" IDS_TOOLTIP_PLAY "播放" IDS_TOOLTIP_STOP "停止" IDS_TOOLTIP_EJECT "卸載" Index: base/applications/mplay32/mplay32.c =================================================================== --- base/applications/mplay32/mplay32.c (revision 64082) +++ base/applications/mplay32/mplay32.c (working copy) @@ -8,6 +8,7 @@ #define MAIN_WINDOW_HEIGHT 125 #define MAIN_WINDOW_MIN_WIDTH 250 +#define MAX_MCISTR 256 HINSTANCE hInstance = NULL; HWND hTrackBar = NULL; @@ -152,7 +153,7 @@ static VOID ShowMCIError(HWND hwnd, DWORD dwError) { - TCHAR szErrorMessage[256]; + TCHAR szErrorMessage[MAX_MCISTR]; TCHAR szTempMessage[300]; if (mciGetErrorString(dwError, szErrorMessage, sizeof(szErrorMessage) / sizeof(TCHAR)) == FALSE) @@ -321,6 +322,37 @@ } static DWORD +GetNumDevices(VOID) +{ + MCI_SYSINFO_PARMS mciSysInfo; + DWORD dwNumDevices = 0; + + mciSysInfo.dwCallback = 0; + mciSysInfo.lpstrReturn = (LPTSTR)&dwNumDevices; + mciSysInfo.dwRetSize = sizeof(DWORD); + mciSysInfo.dwNumber = 1; + mciSysInfo.wDeviceType = MCI_DEVTYPE_WAVEFORM_AUDIO; + + mciSendCommand(MCI_ALL_DEVICE_ID, MCI_SYSINFO, MCI_SYSINFO_QUANTITY | MCI_WAIT, (DWORD_PTR)&mciSysInfo); + + return *(DWORD*)mciSysInfo.lpstrReturn; +} + +static VOID +GetDeviceName(DWORD dwDevice, LPTSTR lpDeviceName, DWORD dwDeviceName) +{ + MCI_SYSINFO_PARMS mciSysInfo; + + mciSysInfo.dwCallback = 0; + mciSysInfo.lpstrReturn = lpDeviceName; + mciSysInfo.dwRetSize = dwDeviceName; + mciSysInfo.dwNumber = dwDevice; + mciSysInfo.wDeviceType = MCI_DEVTYPE_WAVEFORM_AUDIO; + + mciSendCommand(MCI_ALL_DEVICE_ID, MCI_SYSINFO, MCI_SYSINFO_NAME | MCI_WAIT, (DWORD_PTR)&mciSysInfo); +} + +static DWORD CloseMciDevice(VOID) { MCI_GENERIC_PARMS mciGeneric; @@ -343,6 +375,9 @@ { MCI_STATUS_PARMS mciStatus; MCI_OPEN_PARMS mciOpen; + + MCI_INFO_PARMS mciInfo; + TCHAR szNewTitle[MAX_PATH]; DWORD dwError; @@ -639,17 +674,180 @@ } } +static size_t +GetExtensionBufferSize(VOID) +{ + DWORD dwNumValues; + DWORD dwValueSize; + HKEY hKey; + + + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\MCI Extensions"), 0, KEY_READ, &hKey) != ERROR_SUCCESS) + { + return 3; + } + + if (RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &dwNumValues, &dwValueSize, NULL, NULL, NULL) != ERROR_SUCCESS) + { + RegCloseKey(hKey); + return 3; + } + + RegCloseKey(hKey); + return (dwValueSize + 4) * dwNumValues; +} + +static BOOL +GetDeviceExtensions(LPTSTR lpDevice, LPTSTR lpExtensionList) +{ + TCHAR szExtension[MAX_PATH]; + TCHAR *szExtensionDevice = NULL; + TCHAR *c = NULL; + DWORD dwNumValues; + DWORD dwValueSize; + DWORD dwValueDataSize; + DWORD dwElementSize = 0; + DWORD dwDeviceSize = 0; + DWORD i; + UINT uSizeRemain; + HKEY hKey; + + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\MCI Extensions"), 0, KEY_READ, &hKey) != ERROR_SUCCESS) + { + return FALSE; + } + + if (RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &dwNumValues, &dwValueSize, &dwValueDataSize, NULL, NULL) != ERROR_SUCCESS) + { + RegCloseKey(hKey); + return FALSE; + } + + dwElementSize = (dwValueSize + 4) * dwNumValues; + + szExtensionDevice = malloc(dwValueDataSize * sizeof(TCHAR)); + if (!szExtensionDevice) + { + RegCloseKey(hKey); + return FALSE; + } + + if (dwNumValues) + { + uSizeRemain = dwElementSize * sizeof(TCHAR); + c = lpExtensionList; + + for (i = 0; i < dwNumValues; i++) + { + dwValueSize = MAX_PATH; + dwDeviceSize = dwValueDataSize * sizeof(TCHAR); + + if (RegEnumValue(hKey, i, szExtension, &dwValueSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) + { + RegQueryValueEx(hKey, szExtension, NULL, NULL, (LPBYTE)szExtensionDevice, &dwDeviceSize); + + if ((_tcscmp(lpDevice, szExtensionDevice) == 0) || (_tcscmp(lpDevice, _T("")) == 0)) + { + StringCbPrintfEx(c, uSizeRemain, &c, &uSizeRemain, 0, _T("%s%s%s"), _T("*."), szExtension, _T(";")); + } + } + } + + c--; + StringCbCopyEx(c, uSizeRemain, _T("\0"), &c, &uSizeRemain, 0); + } + + free(szExtensionDevice); + RegCloseKey(hKey); + + return TRUE; +} + static VOID OpenFileDialog(HWND hwnd) { OPENFILENAME OpenFileName; TCHAR szFile[MAX_PATH + 1] = _T("\0"); - TCHAR szFilter[MAX_PATH], szCurrentDir[MAX_PATH]; + TCHAR szFilterDesc[MAX_PATH]; + TCHAR szCurrentDir[MAX_PATH]; + TCHAR szDeviceName[MAX_MCISTR]; + TCHAR *szExtensionList = NULL; + TCHAR *szFilter = NULL; + TCHAR *c = NULL; + DWORD dwElementSize = 0; + DWORD dwExtensionSize = 0; + DWORD dwFilterSize = 0; + DWORD dwNumDevices; + DWORD i; + UINT uSizeRemain; + ZeroMemory(&OpenFileName, sizeof(OpenFileName)); - LoadString(hInstance, IDS_ALL_TYPES_FILTER, szFilter, sizeof(szFilter) / sizeof(TCHAR)); + // Get the buffer size needed to store file extensions + dwExtensionSize = GetExtensionBufferSize(); + // Get the number of installed MCI devices + dwNumDevices = GetNumDevices(); + + szExtensionList = malloc(dwExtensionSize * sizeof(TCHAR)); + if (!szExtensionList) + { + return; + } + + //The size needed to store one entry in the list of filter masks + dwElementSize = MAX_MCISTR + (dwExtensionSize * 2) + 5; + + dwFilterSize = (((dwElementSize * dwNumDevices) + 3) * sizeof(TCHAR)) + sizeof(szFilterDesc); + + szFilter = malloc(dwFilterSize); + if (!szFilter) + { + free(szExtensionList); + return; + } + + ZeroMemory(szFilter, dwFilterSize); + + uSizeRemain = dwFilterSize; + c = szFilter; + + for (i = 1; i <= dwNumDevices; i++) + { + GetDeviceName(i, szDeviceName, sizeof(szDeviceName)); + + // We want "*.*" as the filter in case there are no extensions registered for the specified device + StringCbCopy(szExtensionList, dwExtensionSize * sizeof(TCHAR), _T("*.*")); + + GetDeviceExtensions(szDeviceName, szExtensionList); + + StringCbPrintfEx(c, uSizeRemain, &c, &uSizeRemain, 0, _T("%s (%s)"), szDeviceName, szExtensionList); + + // Skip one char to seperate the description from the filter mask + c++; + uSizeRemain -= sizeof(*c); + + StringCbCopyEx(c, uSizeRemain, szExtensionList, &c, &uSizeRemain, 0); + + // Skip another char to seperate the elements of the filter mask + c++; + uSizeRemain -= sizeof(*c); + } + + GetDeviceExtensions(_T(""), szExtensionList); + + LoadString(hInstance, IDS_ALL_TYPES_FILTER, szFilterDesc, sizeof(szFilterDesc) / sizeof(TCHAR)); + + StringCbPrintfEx(c, uSizeRemain, &c, &uSizeRemain, 0, _T("%s (%s)"), szFilterDesc, szExtensionList); + + // Skip one char to seperate the description from the filter mask + c++; + uSizeRemain -= sizeof(*c); + + StringCbCopyEx(c, uSizeRemain, szExtensionList, &c, &uSizeRemain, 0); + + if (!GetCurrentDirectory(sizeof(szCurrentDir) / sizeof(TCHAR), szCurrentDir)) { _tcscpy(szCurrentDir, _T("c:\\")); @@ -669,6 +867,9 @@ { PlayFile(hwnd, OpenFileName.lpstrFile); } + + free(szFilter); + free(szExtensionList); } LRESULT CALLBACK Index: base/applications/mplay32/mplay32.h =================================================================== --- base/applications/mplay32/mplay32.h (revision 64082) +++ base/applications/mplay32/mplay32.h (working copy) @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -10,6 +11,7 @@ #include #include #include +#include #include "resource.h"