summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/metadata/mod.c26
1 files changed, 11 insertions, 15 deletions
diff --git a/apps/metadata/mod.c b/apps/metadata/mod.c
index cbc9fc11f6..de76823e91 100644
--- a/apps/metadata/mod.c
+++ b/apps/metadata/mod.c
@@ -35,17 +35,20 @@
35bool get_mod_metadata(int fd, struct mp3entry* id3) 35bool get_mod_metadata(int fd, struct mp3entry* id3)
36{ 36{
37 /* Use the trackname part of the id3 structure as a temporary buffer */ 37 /* Use the trackname part of the id3 structure as a temporary buffer */
38 unsigned char buf[MODULEHEADERSIZE]; 38 unsigned char *buf = id3->id3v2buf;
39 unsigned char id[4]; 39 unsigned char id[4];
40 bool is_mod_file = false; 40 bool is_mod_file = false;
41 char *p;
42 41
43 if ((lseek(fd, 0, SEEK_SET) < 0) 42 /* Seek to file begin */
44 || (read(fd, buf, sizeof(buf)) < MODULEHEADERSIZE)) 43 if (lseek(fd, 0, SEEK_SET) < 0)
45 {
46 return false; 44 return false;
47 } 45 /* Use id3v2buf as buffer for the track name */
48 46 if (read(fd, buf, sizeof(id3->id3v2buf)) < (ssize_t)sizeof(id3->id3v2buf))
47 return false;
48 /* Seek to MOD ID position */
49 if (lseek(fd, MODULEHEADERSIZE, SEEK_SET) < 0)
50 return false;
51 /* Read MOD ID */
49 if (read(fd, id, sizeof(id)) < (ssize_t)sizeof(id)) 52 if (read(fd, id, sizeof(id)) < (ssize_t)sizeof(id))
50 return false; 53 return false;
51 54
@@ -88,14 +91,7 @@ bool get_mod_metadata(int fd, struct mp3entry* id3)
88 if (!is_mod_file) 91 if (!is_mod_file)
89 return false; 92 return false;
90 93
91 p = id3->id3v2buf; 94 id3->title = id3->id3v2buf; /* Point title to previous read ID3 buffer. */
92
93 /* Copy Title */
94 if (strlcpy(p, buf, sizeof(id3->id3v2buf)) >= sizeof(id3->id3v2buf))
95 return false;
96
97 id3->title = p;
98
99 id3->bitrate = filesize(fd)/1024; /* size in kb */ 95 id3->bitrate = filesize(fd)/1024; /* size in kb */
100 id3->frequency = 44100; 96 id3->frequency = 44100;
101 id3->length = 120*1000; 97 id3->length = 120*1000;