mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-12-07 05:35:02 -05:00
no more malloc()s or strdup()s
the test program now takes any amount of files, which makes it easy to verify lots of files at once using shell wildcards git-svn-id: svn://svn.rockbox.org/rockbox/trunk@196 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
b416a91980
commit
963a64770e
1 changed files with 54 additions and 35 deletions
|
|
@ -131,13 +131,12 @@ setid3v1title(FILE *file, mp3entry *entry)
|
||||||
char buffer[31];
|
char buffer[31];
|
||||||
int offsets[3] = {-95,-65,-125};
|
int offsets[3] = {-95,-65,-125};
|
||||||
int i;
|
int i;
|
||||||
char *result;
|
|
||||||
|
static char keepit[3][32];
|
||||||
|
|
||||||
for(i=0;i<3;i++) {
|
for(i=0;i<3;i++) {
|
||||||
if(fseek(file, offsets[i], SEEK_END) != 0) {
|
if(fseek(file, offsets[i], SEEK_END) != 0)
|
||||||
free(result);
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
|
||||||
|
|
||||||
buffer[0]=0;
|
buffer[0]=0;
|
||||||
fgets(buffer, 31, file);
|
fgets(buffer, 31, file);
|
||||||
|
|
@ -146,13 +145,16 @@ setid3v1title(FILE *file, mp3entry *entry)
|
||||||
if(buffer[0]) {
|
if(buffer[0]) {
|
||||||
switch(i) {
|
switch(i) {
|
||||||
case 0:
|
case 0:
|
||||||
entry->artist = strdup(buffer);
|
strcpy(keepit[0], buffer);
|
||||||
|
entry->artist = keepit[0];
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
entry->album = strdup(buffer);
|
strcpy(keepit[1], buffer);
|
||||||
|
entry->album = keepit[1];
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
entry->title = strdup(buffer);
|
strcpy(keepit[2], buffer);
|
||||||
|
entry->title = keepit[2];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -173,7 +175,6 @@ setid3v1title(FILE *file, mp3entry *entry)
|
||||||
static void
|
static void
|
||||||
setid3v2title(FILE *file, mp3entry *entry)
|
setid3v2title(FILE *file, mp3entry *entry)
|
||||||
{
|
{
|
||||||
char *buffer;
|
|
||||||
int minframesize;
|
int minframesize;
|
||||||
int size, readsize = 0, headerlen;
|
int size, readsize = 0, headerlen;
|
||||||
char *title = NULL;
|
char *title = NULL;
|
||||||
|
|
@ -181,6 +182,8 @@ setid3v2title(FILE *file, mp3entry *entry)
|
||||||
char *album = NULL;
|
char *album = NULL;
|
||||||
char header[10];
|
char header[10];
|
||||||
unsigned short int version;
|
unsigned short int version;
|
||||||
|
static char buffer[512];
|
||||||
|
int titlen, artistn, albumn;
|
||||||
|
|
||||||
/* 10 = headerlength */
|
/* 10 = headerlength */
|
||||||
if(entry->id3v2len < 10)
|
if(entry->id3v2len < 10)
|
||||||
|
|
@ -193,7 +196,10 @@ setid3v2title(FILE *file, mp3entry *entry)
|
||||||
|
|
||||||
/* Read all frames in the tag */
|
/* Read all frames in the tag */
|
||||||
size = entry->id3v2len - 10;
|
size = entry->id3v2len - 10;
|
||||||
buffer = malloc(size + 1);
|
|
||||||
|
if(size >= sizeof(buffer))
|
||||||
|
size = sizeof(buffer)-1;
|
||||||
|
|
||||||
if(size != (int)fread(buffer, sizeof(char), size, file)) {
|
if(size != (int)fread(buffer, sizeof(char), size, file)) {
|
||||||
free(buffer);
|
free(buffer);
|
||||||
return;
|
return;
|
||||||
|
|
@ -235,9 +241,8 @@ setid3v2title(FILE *file, mp3entry *entry)
|
||||||
headerlen--;
|
headerlen--;
|
||||||
if(headerlen > (size - readsize))
|
if(headerlen > (size - readsize))
|
||||||
headerlen = (size - readsize);
|
headerlen = (size - readsize);
|
||||||
artist = malloc(headerlen + 1);
|
artist = buffer + readsize;
|
||||||
snprintf(artist, headerlen + 1, "%s",
|
artistn = headerlen;
|
||||||
(buffer + readsize));
|
|
||||||
readsize += headerlen;
|
readsize += headerlen;
|
||||||
}
|
}
|
||||||
else if(!strncmp(header, "TIT2", strlen("TIT2")) ||
|
else if(!strncmp(header, "TIT2", strlen("TIT2")) ||
|
||||||
|
|
@ -246,9 +251,8 @@ setid3v2title(FILE *file, mp3entry *entry)
|
||||||
headerlen--;
|
headerlen--;
|
||||||
if(headerlen > (size - readsize))
|
if(headerlen > (size - readsize))
|
||||||
headerlen = (size - readsize);
|
headerlen = (size - readsize);
|
||||||
title = malloc(headerlen + 1);
|
title = buffer + readsize;
|
||||||
snprintf(title, headerlen + 1, "%s",
|
titlen = headerlen;
|
||||||
(buffer + readsize));
|
|
||||||
readsize += headerlen;
|
readsize += headerlen;
|
||||||
}
|
}
|
||||||
else if(!strncmp(header, "TALB", strlen("TALB"))) {
|
else if(!strncmp(header, "TALB", strlen("TALB"))) {
|
||||||
|
|
@ -256,23 +260,26 @@ setid3v2title(FILE *file, mp3entry *entry)
|
||||||
headerlen--;
|
headerlen--;
|
||||||
if(headerlen > (size - readsize))
|
if(headerlen > (size - readsize))
|
||||||
headerlen = (size - readsize);
|
headerlen = (size - readsize);
|
||||||
album = malloc(headerlen + 1);
|
album = buffer + readsize;
|
||||||
snprintf(album, headerlen + 1, "%s",
|
albumn = headerlen;
|
||||||
(buffer + readsize));
|
|
||||||
readsize += headerlen;
|
readsize += headerlen;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(artist)
|
if(artist) {
|
||||||
entry->artist = artist;
|
entry->artist = artist;
|
||||||
|
artist[artistn]=0;
|
||||||
|
}
|
||||||
|
|
||||||
if(title)
|
if(title) {
|
||||||
entry->title = title;
|
entry->title = title;
|
||||||
|
title[titlen]=0;
|
||||||
|
}
|
||||||
|
|
||||||
if(album)
|
if(album) {
|
||||||
entry->album = album;
|
entry->album = album;
|
||||||
|
album[albumn]=0;
|
||||||
free(buffer);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -392,7 +399,7 @@ getsonglength(FILE *file, mp3entry *entry)
|
||||||
if((header & 0xF000) == 0xF000)
|
if((header & 0xF000) == 0xF000)
|
||||||
goto restart;
|
goto restart;
|
||||||
|
|
||||||
#ifdef DEBUG_STANDALONE
|
#ifdef DEBUG_VERBOSE
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"We found %x-%x-%x-%x and checksync %i and test %x\n",
|
"We found %x-%x-%x-%x and checksync %i and test %x\n",
|
||||||
BYTE0(header), BYTE1(header), BYTE2(header), BYTE3(header),
|
BYTE0(header), BYTE1(header), BYTE2(header), BYTE3(header),
|
||||||
|
|
@ -437,7 +444,7 @@ getsonglength(FILE *file, mp3entry *entry)
|
||||||
if(frequency == 0)
|
if(frequency == 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
#ifdef DEBUG_STANDALONE
|
#ifdef DEBUG_VERBOSE
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Version %i, lay %i, biti %i, bitr %i, freqi %i, freq %i\n",
|
"Version %i, lay %i, biti %i, bitr %i, freqi %i, freq %i\n",
|
||||||
version, layer, bitindex, bitrate, freqindex, frequency);
|
version, layer, bitindex, bitrate, freqindex, frequency);
|
||||||
|
|
@ -514,25 +521,37 @@ mp3info(mp3entry *entry, char *filename)
|
||||||
|
|
||||||
#ifdef DEBUG_STANDALONE
|
#ifdef DEBUG_STANDALONE
|
||||||
|
|
||||||
|
char *secs2str(int ms)
|
||||||
|
{
|
||||||
|
static char buffer[32];
|
||||||
|
int secs = ms/1000;
|
||||||
|
ms %= 1000;
|
||||||
|
sprintf(buffer, "%d:%02d.%d", secs/60, secs%60, ms/100);
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
if(argc > 1) {
|
int i;
|
||||||
|
for(i=1; i<argc; i++) {
|
||||||
mp3entry mp3;
|
mp3entry mp3;
|
||||||
if(mp3info(&mp3, argv[1])) {
|
if(mp3info(&mp3, argv[i])) {
|
||||||
printf("Failed\n");
|
printf("Failed to get %s\n", argv[i]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Title: %s\n"
|
printf("****** File: %s\n"
|
||||||
"Artist: %s\n"
|
" Title: %s\n"
|
||||||
"Album: %s\n"
|
" Artist: %s\n"
|
||||||
"Length: %.1f secs\n"
|
" Album: %s\n"
|
||||||
"Bitrate: %d\n"
|
" Length: %s\n"
|
||||||
"Frequency: %d\n",
|
" Bitrate: %d\n"
|
||||||
|
" Frequency: %d\n",
|
||||||
|
argv[i],
|
||||||
mp3.title?mp3.title:"<blank>",
|
mp3.title?mp3.title:"<blank>",
|
||||||
mp3.artist?mp3.artist:"<blank>",
|
mp3.artist?mp3.artist:"<blank>",
|
||||||
mp3.album?mp3.album:"<blank>",
|
mp3.album?mp3.album:"<blank>",
|
||||||
mp3.length/1000.0,
|
secs2str(mp3.length),
|
||||||
mp3.bitrate,
|
mp3.bitrate,
|
||||||
mp3.frequency);
|
mp3.frequency);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue