[sink_wavwrite] check fseek and fwrite return values
[aubio.git] / src / io / sink.c
index 76980bb..f8ac5fd 100644 (file)
@@ -18,7 +18,6 @@
 
 */
 
-#include "config.h"
 #include "aubio_priv.h"
 #include "fvec.h"
 #include "fmat.h"
@@ -54,7 +53,7 @@ struct _aubio_sink_t {
   del_aubio_sink_t s_del;
 };
 
-aubio_sink_t * new_aubio_sink(char_t * uri, uint_t samplerate) {
+aubio_sink_t * new_aubio_sink(const char_t * uri, uint_t samplerate) {
   aubio_sink_t * s = AUBIO_NEW(aubio_sink_t);
 #ifdef HAVE_SINK_APPLE_AUDIO
   s->sink = (void *)new_aubio_sink_apple_audio(uri, samplerate);
@@ -70,7 +69,7 @@ aubio_sink_t * new_aubio_sink(char_t * uri, uint_t samplerate) {
     return s;
   }
 #endif /* HAVE_SINK_APPLE_AUDIO */
-#if HAVE_SNDFILE
+#ifdef HAVE_SNDFILE
   s->sink = (void *)new_aubio_sink_sndfile(uri, samplerate);
   if (s->sink) {
     s->s_do = (aubio_sink_do_t)(aubio_sink_sndfile_do);
@@ -84,7 +83,7 @@ aubio_sink_t * new_aubio_sink(char_t * uri, uint_t samplerate) {
     return s;
   }
 #endif /* HAVE_SNDFILE */
-#if HAVE_WAVWRITE
+#ifdef HAVE_WAVWRITE
   s->sink = (void *)new_aubio_sink_wavwrite(uri, samplerate);
   if (s->sink) {
     s->s_do = (aubio_sink_do_t)(aubio_sink_wavwrite_do);
@@ -98,9 +97,12 @@ aubio_sink_t * new_aubio_sink(char_t * uri, uint_t samplerate) {
     return s;
   }
 #endif /* HAVE_WAVWRITE */
-  AUBIO_ERROR("sink: failed creating %s with samplerate %dHz\n",
-      uri, samplerate);
-  AUBIO_FREE(s);
+#if !defined(HAVE_WAVWRITE) && \
+  !defined(HAVE_SNDFILE) && \
+  !defined(HAVE_SINK_APPLE_AUDIO)
+  AUBIO_ERROR("sink: failed creating '%s' at %dHz (no sink built-in)\n", uri, samplerate);
+#endif
+  del_aubio_sink(s);
   return NULL;
 }
 
@@ -120,11 +122,11 @@ uint_t aubio_sink_preset_channels(aubio_sink_t * s, uint_t channels) {
   return s->s_preset_channels((void *)s->sink, channels);
 }
 
-uint_t aubio_sink_get_samplerate(aubio_sink_t * s) {
+uint_t aubio_sink_get_samplerate(const aubio_sink_t * s) {
   return s->s_get_samplerate((void *)s->sink);
 }
 
-uint_t aubio_sink_get_channels(aubio_sink_t * s) {
+uint_t aubio_sink_get_channels(const aubio_sink_t * s) {
   return s->s_get_channels((void *)s->sink);
 }
 
@@ -133,8 +135,8 @@ uint_t aubio_sink_close(aubio_sink_t *s) {
 }
 
 void del_aubio_sink(aubio_sink_t * s) {
-  if (!s) return;
-  s->s_del((void *)s->sink);
+  AUBIO_ASSERT(s);
+  if (s->s_del && s->sink)
+    s->s_del((void *)s->sink);
   AUBIO_FREE(s);
-  return;
 }