Files
miniaudio/extras/vfs/debugging/miniaudio_vfs_debugging.c
T
2026-01-12 17:29:18 +10:00

107 lines
3.3 KiB
C

#ifndef miniaudio_vfs_debugging_c
#define miniaudio_vfs_debugging_c
#include "miniaudio_vfs_debugging.h"
MA_API ma_vfs_debugging_config ma_vfs_debugging_config_init(ma_vfs* pUnderlyingVFS, ma_uint32 latencyInMilliseconds)
{
ma_vfs_debugging_config config;
MA_ZERO_OBJECT(&config);
config.pUnderlyingVFS = pUnderlyingVFS;
config.latencyInMilliseconds = latencyInMilliseconds;
return config;
}
static ma_vfs_debugging* ma_vfs_debugging_cast(ma_vfs* pVFS)
{
return (ma_vfs_debugging*)pVFS;
}
static ma_vfs* ma_vfs_debugging_get_underlying_vfs(ma_vfs* pVFS)
{
return ma_vfs_debugging_cast(pVFS)->config.pUnderlyingVFS;
}
static ma_result ma_vfs_debugging_open(ma_vfs* pVFS, const char* pFilePath, ma_uint32 openMode, ma_vfs_file* pFile)
{
return ma_vfs_open(ma_vfs_debugging_get_underlying_vfs(pVFS), pFilePath, openMode, pFile);
}
static ma_result ma_vfs_debugging_open_w(ma_vfs* pVFS, const wchar_t* pFilePath, ma_uint32 openMode, ma_vfs_file* pFile)
{
return ma_vfs_open_w(ma_vfs_debugging_get_underlying_vfs(pVFS), pFilePath, openMode, pFile);
}
static ma_result ma_vfs_debugging_close(ma_vfs* pVFS, ma_vfs_file file)
{
return ma_vfs_close(ma_vfs_debugging_get_underlying_vfs(pVFS), file);
}
static ma_result ma_vfs_debugging_read(ma_vfs* pVFS, ma_vfs_file file, void* pDst, size_t sizeInBytes, size_t* pBytesRead)
{
ma_vfs_debugging* pDebuggingVFS = ma_vfs_debugging_cast(pVFS);
ma_result result;
/* Introduce artificial latency if requested. */
if (pDebuggingVFS->config.latencyInMilliseconds > 0) {
ma_sleep(pDebuggingVFS->config.latencyInMilliseconds);
}
printf("READING\n");
result = ma_vfs_read(ma_vfs_debugging_get_underlying_vfs(pVFS), file, pDst, sizeInBytes, pBytesRead);
return result;
}
static ma_result ma_vfs_debugging_write(ma_vfs* pVFS, ma_vfs_file file, const void* pSrc, size_t sizeInBytes, size_t* pBytesWritten)
{
return ma_vfs_write(ma_vfs_debugging_get_underlying_vfs(pVFS), file, pSrc, sizeInBytes, pBytesWritten);
}
static ma_result ma_vfs_debugging_seek(ma_vfs* pVFS, ma_vfs_file file, ma_int64 offset, ma_seek_origin origin)
{
return ma_vfs_seek(ma_vfs_debugging_get_underlying_vfs(pVFS), file, offset, origin);
}
static ma_result ma_vfs_debugging_tell(ma_vfs* pVFS, ma_vfs_file file, ma_int64* pCursor)
{
return ma_vfs_tell(ma_vfs_debugging_get_underlying_vfs(pVFS), file, pCursor);
}
static ma_result ma_vfs_debugging_info(ma_vfs* pVFS, ma_vfs_file file, ma_file_info* pInfo)
{
return ma_vfs_info(ma_vfs_debugging_get_underlying_vfs(pVFS), file, pInfo);
}
MA_API ma_result ma_vfs_debugging_init(const ma_vfs_debugging_config* pConfig, ma_vfs_debugging* pVFS)
{
if (pVFS == NULL) {
return MA_INVALID_ARGS;
}
MA_ZERO_OBJECT(pVFS);
if (pConfig == NULL) {
pVFS->config = ma_vfs_debugging_config_init(NULL, 0);
} else {
pVFS->config = *pConfig;
}
pVFS->cb.onOpen = ma_vfs_debugging_open;
pVFS->cb.onOpenW = ma_vfs_debugging_open_w;
pVFS->cb.onClose = ma_vfs_debugging_close;
pVFS->cb.onRead = ma_vfs_debugging_read;
pVFS->cb.onWrite = ma_vfs_debugging_write;
pVFS->cb.onSeek = ma_vfs_debugging_seek;
pVFS->cb.onTell = ma_vfs_debugging_tell;
pVFS->cb.onInfo = ma_vfs_debugging_info;
return MA_SUCCESS;
}
#endif /* miniaudio_vfs_debugging_c */