/************************************************************************** * MCICDA_Info [internal] */ static DWORD MCICDA_Info(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMSW lpParms) { LPCWSTR str = NULL; WINE_MCICDAUDIO* wmcda = MCICDA_GetOpenDrv(wDevID); DWORD ret = 0; WCHAR buffer[16]; TRACE("(%04X, %08X, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL || lpParms->lpstrReturn == NULL) return MCIERR_NULL_PARAMETER_BLOCK; if (wmcda == NULL) return MCIERR_INVALID_DEVICE_ID; TRACE("buf=%p, len=%u\n", lpParms->lpstrReturn, lpParms->dwRetSize); if (dwFlags & MCI_INFO_PRODUCT) { static const WCHAR wszAudioCd[] = {'W','i','n','e','\'','s',' ','a','u','d','i','o',' ','C','D',0}; str = wszAudioCd; } else if (dwFlags & MCI_INFO_MEDIA_UPC) { ret = MCIERR_NO_IDENTITY; } else if (dwFlags & MCI_INFO_MEDIA_IDENTITY) { DWORD res = 0; CDROM_TOC toc; DWORD br; static const WCHAR wszLu[] = {'%','l','u',0}; if (!DeviceIoControl(wmcda->handle, IOCTL_CDROM_READ_TOC, NULL, 0, &toc, sizeof(toc), &br, NULL)) { return MCICDA_GetError(wmcda); } res = CDROM_Audio_GetSerial(&toc); sprintfW(buffer, wszLu, res); str = buffer; } else { WARN("Don't know this info command (%u)\n", dwFlags); ret = MCIERR_MISSING_PARAMETER; } if (!ret) { TRACE("=> %s\n", debugstr_w(str)); if (lpParms->dwRetSize) { WCHAR zero = 0; /* FIXME? Since NT, mciwave, mciseq and mcicda set dwRetSize * to the number of characters written, excluding \0. */ lstrcpynW(lpParms->lpstrReturn, str ? str : &zero, lpParms->dwRetSize); } else ret = MCIERR_PARAM_OVERFLOW; } if (MMSYSERR_NOERROR==ret && (dwFlags & MCI_NOTIFY)) MCICDA_Notify(lpParms->dwCallback, wmcda, MCI_NOTIFY_SUCCESSFUL); return ret; }
/************************************************************************** * MCICDA_Info [internal] */ static DWORD MCICDA_Info(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMSW lpParms) { LPCWSTR str = NULL; WINE_MCICDAUDIO* wmcda = MCICDA_GetOpenDrv(wDevID); DWORD ret = 0; WCHAR buffer[16]; TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL || lpParms->lpstrReturn == NULL) return MCIERR_NULL_PARAMETER_BLOCK; if (wmcda == NULL) return MCIERR_INVALID_DEVICE_ID; TRACE("buf=%p, len=%lu\n", lpParms->lpstrReturn, lpParms->dwRetSize); if (dwFlags & MCI_INFO_PRODUCT) { static const WCHAR wszAudioCd[] = {'W','i','n','e','\'','s',' ','a','u','d','i','o',' ','C','D',0}; str = wszAudioCd; } else if (dwFlags & MCI_INFO_MEDIA_UPC) { ret = MCIERR_NO_IDENTITY; } else if (dwFlags & MCI_INFO_MEDIA_IDENTITY) { DWORD res = 0; CDROM_TOC toc; DWORD br; static const WCHAR wszLu[] = {'%','l','u',0}; if (!DeviceIoControl(wmcda->handle, IOCTL_CDROM_READ_TOC, NULL, 0, &toc, sizeof(toc), &br, NULL)) { return MCICDA_GetError(wmcda); } res = CDROM_Audio_GetSerial(&toc); sprintfW(buffer, wszLu, res); str = buffer; } else { WARN("Don't know this info command (%lu)\n", dwFlags); ret = MCIERR_UNRECOGNIZED_COMMAND; } if (str) { if (lpParms->dwRetSize <= strlenW(str)) { lstrcpynW(lpParms->lpstrReturn, str, lpParms->dwRetSize - 1); ret = MCIERR_PARAM_OVERFLOW; } else { strcpyW(lpParms->lpstrReturn, str); } } else { *lpParms->lpstrReturn = 0; } TRACE("=> %s (%ld)\n", debugstr_w(lpParms->lpstrReturn), ret); return ret; }
/************************************************************************** * MCICDA_Info [internal] */ static DWORD MCICDA_Info(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMSA lpParms) { LPSTR str = NULL; WINE_MCICDAUDIO* wmcda = MCICDA_GetOpenDrv(wDevID); DWORD ret = 0; char buffer[16]; TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL || lpParms->lpstrReturn == NULL) return MCIERR_NULL_PARAMETER_BLOCK; if (wmcda == NULL) return MCIERR_INVALID_DEVICE_ID; TRACE("buf=%p, len=%lu\n", lpParms->lpstrReturn, lpParms->dwRetSize); if (dwFlags & MCI_INFO_PRODUCT) { str = "Wine's audio CD"; } else if (dwFlags & MCI_INFO_MEDIA_UPC) { ret = MCIERR_NO_IDENTITY; } else if (dwFlags & MCI_INFO_MEDIA_IDENTITY) { DWORD res = 0; CDROM_TOC toc; DWORD br; if (!DeviceIoControl(wmcda->handle, IOCTL_CDROM_READ_TOC, NULL, 0, &toc, sizeof(toc), &br, NULL)) { return MCICDA_GetError(wmcda); } res = CDROM_Audio_GetSerial(&toc); sprintf(buffer, "%lu", res); str = buffer; } else { WARN("Don't know this info command (%lu)\n", dwFlags); ret = MCIERR_UNRECOGNIZED_COMMAND; } if (str) { if (lpParms->dwRetSize <= strlen(str)) { lstrcpynA(lpParms->lpstrReturn, str, lpParms->dwRetSize - 1); ret = MCIERR_PARAM_OVERFLOW; } else { strcpy(lpParms->lpstrReturn, str); } } else { *lpParms->lpstrReturn = 0; } TRACE("=> %s (%ld)\n", lpParms->lpstrReturn, ret); return ret; }