afh: Get rid of dummy entry at the end of afl[].
[paraslash.git] / afh_common.c
index dcb0b856677de1bded1daa0cee8e3e2002870bf5..0b0d84beb04b2e558c44b8985861d0734561865a 100644 (file)
@@ -80,11 +80,11 @@ static struct audio_format_handler afl[] = {
                .init = opus_afh_init,
 #endif
        },
-       {
-               .name = NULL,
-       }
 };
 
+/** This includes audio formats not compiled in. */
+#define NUM_AUDIO_FORMATS (ARRAY_SIZE(afl))
+
 /**
  * Get the name of the given audio format.
  *
@@ -95,7 +95,7 @@ static struct audio_format_handler afl[] = {
  */
 const char *audio_format_name(int i)
 {
-       if (i < 0 || i >= ARRAY_SIZE(afl) - 1)
+       if (i < 0 || i >= NUM_AUDIO_FORMATS)
                return "???";
        return afl[i].name;
 }
@@ -103,16 +103,17 @@ const char *audio_format_name(int i)
 static inline int next_audio_format(int format)
 {
        for (;;) {
-               if (!afl[format].name)
-                       return format;
                format++;
+               if (format >= NUM_AUDIO_FORMATS)
+                       return format;
                if (afl[format].init)
                        return format;
        }
 }
 
 /** Iterate over each supported audio format. */
-#define FOR_EACH_AUDIO_FORMAT(i) for (i = 0; afl[i].name; i = next_audio_format(i))
+#define FOR_EACH_AUDIO_FORMAT(i) \
+       for (i = 0; i < NUM_AUDIO_FORMATS; i = next_audio_format(i))
 
 /**
  * Call the init function of each supported audio format handler.
@@ -313,7 +314,7 @@ __must_check int afh_get_chunk(long unsigned chunk_num, struct afh_info *afhi,
                        if (ret < 0)
                                return ret;
                }
-               ret = afl[audio_format_id].get_chunk(chunk_num, *afh_context,
+               ret = afh->get_chunk(chunk_num, *afh_context,
                        buf, len);
                if (ret < 0) {
                        afh->close(*afh_context);