afh: Get rid of dummy entry at the end of afl[].
[paraslash.git] / afh_common.c
index bab4d41577952f257ef8c828f9c89c8886a7d2e5..0b0d84beb04b2e558c44b8985861d0734561865a 100644 (file)
@@ -80,24 +80,40 @@ 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.
+ *
+ * \param i The audio format number.
+ *
+ * \return This returns a pointer to statically allocated memory so it
+ * must not be freed by the caller.
+ */
+const char *audio_format_name(int i)
+{
+       if (i < 0 || i >= NUM_AUDIO_FORMATS)
+               return "???";
+       return afl[i].name;
+}
+
 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.
@@ -160,21 +176,6 @@ int guess_audio_format(const char *name)
        return -E_AUDIO_FORMAT;
 }
 
-/**
- * Get the name of the given audio format.
- *
- * \param i The audio format number.
- *
- * \return This returns a pointer to statically allocated memory so it
- * must not be freed by the caller.
- */
-const char *audio_format_name(int i)
-{
-       if (i < 0 || i >= ARRAY_SIZE(afl) - 1)
-               return "???";
-       return afl[i].name;
-}
-
 static int get_file_info(int format, const char *path, char *data,
                size_t size, int fd, struct afh_info *afhi)
 {
@@ -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);