int Id3v2Tag::WritePicToMp3(char *picfile)
{
int flag=0;
FILE *oldfp,*newfp,*picfp;
FRAMELIST *pTemp = m_pFrameList;
int picfileLength;
char *newContent = NULL;
int pos;
while(pTemp != NULL)
{
if(pTemp->frameID == ID3V2_APIC)
{
flag = 1;
break;
}
else
pTemp=pTemp->pNext;
}
picfp = fopen(picfile,"rb");
fseek(picfp,0,SEEK_END);
picfileLength = ftell(picfp);
if(flag == 1)//have apic
{
char *tmp = pTemp->content;
tmp[0]=tmp[0]; //encoding
int len=strlen(tmp+1); //mime type
char type = tmp[len+2]; //pic type
pos =len+3;
do
{
if(((unsigned char)tmp[pos] == 0xff) && ((unsigned char)tmp[pos+1] == 0xd8))
break;
pos+=1;
} while (1);
newContent = (char *)malloc(pos+picfileLength);
memset(newContent,0,pos+picfileLength);
memcpy(newContent,tmp,pos);
free(pTemp->content);
}
else
{
FRAMELIST *node =(FRAMELIST *) malloc(sizeof(FRAMELIST)) ;
memset(node,0,sizeof(FRAMELIST));
node->frameID = ID3V2_APIC;
strcpy(node->frame.FrameID,"APIC");
pTemp = m_pFrameList;
while(pTemp->pNext!=NULL)pTemp=pTemp->pNext;
pTemp->pNext=node;
pTemp = pTemp->pNext;
char *picInfo = (char *)malloc(14);
memset(picInfo,0,14);
picInfo[0]=0;
strcpy(picInfo+1,"image/jpeg");
picInfo[11]=0;
picInfo[12]=0;
picInfo[13]=0;
pos=14;
newContent = (char *)malloc(pos+picfileLength);
memset(newContent,0,pos+picfileLength);
memcpy(newContent,picInfo,pos);
}