From 9f4efc258c6cedb7ea38b544e0678e91d035d7c0 Mon Sep 17 00:00:00 2001 From: Clownacy Date: Tue, 25 Aug 2020 23:39:13 +0100 Subject: [PATCH 1/2] Fix some VC6/2003 errors For whatever reason, neither compiler likes implicit casts between `volatile unsigned int*` and `int*`. --- miniaudio.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/miniaudio.h b/miniaudio.h index 7f90285c..0d2bca41 100644 --- a/miniaudio.h +++ b/miniaudio.h @@ -10409,7 +10409,7 @@ static ma_thread_result MA_THREADCALL ma_device_thread__null(void* pData) } /* Getting here means a suspend or kill operation has been requested. */ - c89atomic_exchange_32(&pDevice->null_device.operationResult, MA_SUCCESS); + c89atomic_exchange_32((c89atomic_uint32*)&pDevice->null_device.operationResult, MA_SUCCESS); ma_event_signal(&pDevice->null_device.operationCompletionEvent); continue; } @@ -10423,7 +10423,7 @@ static ma_thread_result MA_THREADCALL ma_device_thread__null(void* pData) ma_timer_init(&pDevice->null_device.timer); /* We're done. */ - c89atomic_exchange_32(&pDevice->null_device.operationResult, MA_SUCCESS); + c89atomic_exchange_32((c89atomic_uint32*)&pDevice->null_device.operationResult, MA_SUCCESS); ma_event_signal(&pDevice->null_device.operationCompletionEvent); continue; } @@ -10431,7 +10431,7 @@ static ma_thread_result MA_THREADCALL ma_device_thread__null(void* pData) /* Killing the device means we need to get out of this loop so that this thread can terminate. */ if (pDevice->null_device.operation == MA_DEVICE_OP_KILL__NULL) { c89atomic_exchange_32(&pDevice->null_device.operation, MA_DEVICE_OP_NONE__NULL); - c89atomic_exchange_32(&pDevice->null_device.operationResult, MA_SUCCESS); + c89atomic_exchange_32((c89atomic_uint32*)&pDevice->null_device.operationResult, MA_SUCCESS); ma_event_signal(&pDevice->null_device.operationCompletionEvent); break; } @@ -10439,7 +10439,7 @@ static ma_thread_result MA_THREADCALL ma_device_thread__null(void* pData) /* Getting a signal on a "none" operation probably means an error. Return invalid operation. */ if (pDevice->null_device.operation == MA_DEVICE_OP_NONE__NULL) { MA_ASSERT(MA_FALSE); /* <-- Trigger this in debug mode to ensure developers are aware they're doing something wrong (or there's a bug in a miniaudio). */ - c89atomic_exchange_32(&pDevice->null_device.operationResult, (c89atomic_uint32)MA_INVALID_OPERATION); + c89atomic_exchange_32((c89atomic_uint32*)&pDevice->null_device.operationResult, (c89atomic_uint32)MA_INVALID_OPERATION); ma_event_signal(&pDevice->null_device.operationCompletionEvent); continue; /* Continue the loop. Don't terminate. */ } From 145520fabc9267c92e01576507456efab3fe6422 Mon Sep 17 00:00:00 2001 From: Clownacy Date: Wed, 26 Aug 2020 00:12:14 +0100 Subject: [PATCH 2/2] Use fallback when SetFilePointerEX unavailable VC6 doesn't appear to have SetFilePointerEX, so fallback on SetFilePointer instead. This matches-up with VC6 not supporting 64-bit fseek. Visual Studio .NET 2003 supports it, however. --- miniaudio.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/miniaudio.h b/miniaudio.h index 0d2bca41..b7f07bba 100644 --- a/miniaudio.h +++ b/miniaudio.h @@ -42125,7 +42125,16 @@ static ma_result ma_default_vfs_seek__win32(ma_vfs* pVFS, ma_vfs_file file, ma_i dwMoveMethod = FILE_BEGIN; } +#if defined(_MSC_VER) && _MSC_VER <= 1200 + /* No SetFilePointerEx() so restrict to 31 bits. */ + if (origin > 0x7FFFFFFF) { + return MA_OUT_OF_RANGE; + } + + result = SetFilePointer((HANDLE)file, (LONG)liDistanceToMove.QuadPart, NULL, dwMoveMethod); +#else result = SetFilePointerEx((HANDLE)file, liDistanceToMove, NULL, dwMoveMethod); +#endif if (result == 0) { return ma_result_from_GetLastError(GetLastError()); } @@ -42138,12 +42147,20 @@ static ma_result ma_default_vfs_tell__win32(ma_vfs* pVFS, ma_vfs_file file, ma_i LARGE_INTEGER liZero; LARGE_INTEGER liTell; BOOL result; +#if defined(_MSC_VER) && _MSC_VER <= 1200 + LONG tell; +#endif (void)pVFS; liZero.QuadPart = 0; +#if defined(_MSC_VER) && _MSC_VER <= 1200 + result = SetFilePointer((HANDLE)file, (LONG)liZero.QuadPart, &tell, FILE_CURRENT); + liTell.QuadPart = tell; +#else result = SetFilePointerEx((HANDLE)file, liZero, &liTell, FILE_CURRENT); +#endif if (result == 0) { return ma_result_from_GetLastError(GetLastError()); }