From 35129d66b78c146266cd85da68c5725fc289e49a Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 15 Sep 2019 13:42:56 -0700 Subject: Clean up the spaghetti mess in alcCaptureSamples --- alc/alc.cpp | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'alc') diff --git a/alc/alc.cpp b/alc/alc.cpp index 4a4ed677..a5fde792 100644 --- a/alc/alc.cpp +++ b/alc/alc.cpp @@ -3907,14 +3907,26 @@ START_API_FUNC return; } - ALCenum err{ALC_INVALID_VALUE}; - { std::lock_guard _{dev->StateLock}; - BackendBase *backend{dev->Backend.get()}; - if(samples >= 0 && backend->availableSamples() >= static_cast(samples)) - err = backend->captureSamples(static_cast(buffer), - static_cast(samples)); + if(samples < 0 || (samples > 0 && buffer == nullptr)) + { + alcSetError(dev.get(), ALC_INVALID_VALUE); + return; } - if(err != ALC_NO_ERROR) + if(samples < 1) + return; + + std::lock_guard _{dev->StateLock}; + BackendBase *backend{dev->Backend.get()}; + + const auto usamples = static_cast(samples); + if(usamples > backend->availableSamples()) + { + alcSetError(dev.get(), ALC_INVALID_VALUE); + return; + } + + auto *bbuffer = static_cast(buffer); + if(ALCenum err{backend->captureSamples(bbuffer, usamples)}) alcSetError(dev.get(), err); } END_API_FUNC -- cgit v1.2.3