int Id3v2Tag::Readxxxxxx()
{
FILE *fp=NULL;
fp= fopen(m_pFileName,"rb");
// fseek(fp,-128,SEEK_END);
fread(&m_stHeader,sizeof(HEADER),1,fp);
if( (m_stHeader.Header[0] == 'I'||m_stHeader.Header[0] == 'i' )
&&(m_stHeader.Header[1] == 'D'||m_stHeader.Header[1] == 'd' )
&&(m_stHeader.Header[2] == '3'))
{
m_headerSize = CalcHeadSize(m_stHeader.Size);
}
else
{
return -1;
}
FRAME header;
FRAME *pheader = &header;
int i=0,j =0;
do{
memset(pheader,0,sizeof(FRAME));
fread((char *)pheader,sizeof(FRAME),1,fp);
// pheader = (ID3V2Header *)(pId3Info+i);
int FSize = 0;
int frameId = IsId3v2Frame(pheader->FrameID);
if(frameId)
{
FRAMELIST *frameNode = (FRAMELIST *)malloc(sizeof(FRAMELIST));
if(frameNode == NULL)
{
return -1;
}
memset(frameNode,0,sizeof(FRAMELIST));
memcpy(&frameNode->frame,pheader,sizeof(FRAME));
FSize = pheader->Size[0]*0x100000000+pheader->Size[1]*0x10000+pheader->Size[2]*0x100+pheader->Size[3];
frameNode->frameSize = FSize ;
frameNode->frameID = frameId;
//FSize = (pheader->Size[0]&0x7F)*0x200000 + (pheader->Size[1]&0x7F)*0x400 + (pheader->Size[2]&0x7F)*0x80 +(pheader->Size[3]&0x7F);
char *tmp = (char *)malloc(FSize+1);
if(tmp == NULL)
{
return -1;
}
memset(tmp,0,FSize+1);
int len=FSize;
int sumlen = 0;
int ret = 0,ret2=0;
ret=FSize/300;
if(ret != 0)
ret=fread(tmp+sumlen,300,ret,fp);
ret2=FSize%300;
int res = ftell(fp);
if(ret2 != 0)
ret=fread(tmp+ret*300,ret2,1,fp);
frameNode->content = tmp;
if(m_pFrameList == NULL)
{
m_pFrameList = frameNode;
m_pTemp = m_pFrameList;
}
else
{
m_pTemp->pNext = frameNode;
m_pTemp = m_pTemp->pNext;
}
}
i+=(FSize+sizeof(ID3V2Header));
}while(i<m_headerSize);
fclose(fp);
return 0;
}