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:
Daniel Stenberg 2002-04-23 11:46:16 +00:00
parent b416a91980
commit 963a64770e

View file

@ -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);
} }