//Open and parse a M3U file: int M3U_open(char *fileName){ FILE *f; char lineText[512]; char chrLength[20]; char title[264]; struct M3U_songEntry *singleEntry; int playListCount = lPlayList.songCount; f = fopen(fileName, "rt"); if (f == NULL){ //Error opening file: return(-1); } while(fgets(lineText, 256, f) != NULL){ if (!strncmp(lineText, "#EXTINF:", 8)){ //Length and title: splitSongInfo(lineText, chrLength, title); }else if (!strncmp(lineText, "#EXTM3U", 7)){ //Nothing to do. :) }else if (strlen(lineText) > 2){ //Store song info: singleEntry = &lPlayList.songs[playListCount++]; strncpy(singleEntry->fileName, lineText, 263); singleEntry->fileName[263] = '\0'; if ((int)singleEntry->fileName[strlen(singleEntry->fileName) - 1] == 10 || (int)singleEntry->fileName[strlen(singleEntry->fileName) - 1] == 13 ){ singleEntry->fileName[strlen(singleEntry->fileName) - 1] = '\0'; } if ((int)singleEntry->fileName[strlen(singleEntry->fileName) - 1] == 10 || (int)singleEntry->fileName[strlen(singleEntry->fileName) - 1] == 13 ){ singleEntry->fileName[strlen(singleEntry->fileName) - 1] = '\0'; } if (strlen(title)){ strncpy(singleEntry->title, title, 263); }else{ getFileName(singleEntry->fileName, singleEntry->title); } singleEntry->title[263] = '\0'; singleEntry->length = atoi(chrLength); if (playListCount == MAX_SONGS){ break; } } } fclose(f); lPlayList.modified = 0; lPlayList.songCount = playListCount; strcpy(lPlayList.fileName, fileName); return(0); }