]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - mp3_afh.c
afh_common.c: Avoid ifdefs.
[paraslash.git] / mp3_afh.c
index 2b558cbbaa1d8c82fd5fc121b6a1ce30fbff08ee..2506b95e8799780c5c5b26adf723450f63d41c91 100644 (file)
--- a/mp3_afh.c
+++ b/mp3_afh.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2014 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2003 Andre Noll <maan@tuebingen.mpg.de>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -126,9 +126,19 @@ static char *get_strings(struct id3_frame *fr)
 static void mp3_get_id3(__a_unused unsigned char *map,
                __a_unused size_t numbytes, int fd, struct taginfo *tags)
 {
-       int i;
+       int i, new_fd;
        struct id3_tag *id3_t;
-       struct id3_file *id3_f = id3_file_fdopen(fd, ID3_FILE_MODE_READONLY);
+       struct id3_file *id3_f;
+
+       /*
+        * We are not supposed to close fd, but to avoid memory leaks we must
+        * call id3_file_close() on the id3_file after we are done. As
+        * id3_file_close() closes fd, we first create a copy for libid3tag.
+        */
+       new_fd = dup(fd);
+       if (new_fd < 0)
+               return;
+       id3_f = id3_file_fdopen(new_fd, ID3_FILE_MODE_READONLY);
 
        if (!id3_f)
                return;