summaryrefslogtreecommitdiff
path: root/src/portaudio.c
diff options
context:
space:
mode:
authorzlago2025-07-31 19:59:46 +0200
committerzlago2025-07-31 20:03:26 +0200
commitf9d7e5829c714fb0de1912089d320e036972c6ec (patch)
tree3ef3e8056e28368605fc565c8726e19719b3b2de /src/portaudio.c
parentc3579a3f8784ad49d081dc8347bbcadacc0829a2 (diff)
add bounds checking to organya modulesHEADmain
Diffstat (limited to 'src/portaudio.c')
-rw-r--r--src/portaudio.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/portaudio.c b/src/portaudio.c
index 7ff6ca3..e5c5d92 100644
--- a/src/portaudio.c
+++ b/src/portaudio.c
@@ -36,6 +36,22 @@ int audio_callback(void const *inBuf, void *outBuf, unsigned long const frameCou
int (*file_ext(char *file))(struct blob *, struct userdata *);
+#include <alsa/asoundlib.h>
+#include <stdarg.h>
+static void alsa_shut_up(char const *file, int line, char const *function, int err, char const *fmt, ...) {
+ if (err == 0) {
+ // duckGPT claims its not unsafe to return before using va_ functions
+ return;
+ }
+ // ALSA lib (real)
+ fprintf(stderr, "ALSA lib %s:%i:(%s) ", file, line, function);
+ va_list list;
+ va_start(list, fmt);
+ vfprintf(stderr, fmt, list);
+ va_end(list);
+ putc('\n', stderr);
+}
+
int main(int argc, char **argv) {
if (argc != 2) {
eprintf("usage: %s audio-file.{mid,mod,xm,it,s3m}\n", argv[0]);
@@ -59,11 +75,13 @@ int main(int argc, char **argv) {
signal(SIGINT, sigint_handler); // signal(3) claims this method is deprecated, but..
+ snd_lib_error_set_handler(alsa_shut_up);
PaError paErr;
if ((paErr = Pa_Initialize()) != paNoError) {
printf("error: Pa_Initialize: %s\n", Pa_GetErrorText(paErr));
goto error;
}
+ snd_lib_error_set_handler(NULL);
PaStream *stream;
if ((paErr = Pa_OpenDefaultStream(