/** * @brief Returns the list of frames of the file * * @param file the path to the file to parse * @param frame_array_size pointer to a valid integer where the function will * store the number of read frames * * @return NULL if error, an array of frames if successful */ id3v2_frame_t *tag_get_frames(const char *file, int *frame_array_size) { id3v2_header_t header; id3v2_frame_t *frames = malloc(sizeof(id3v2_frame_t)); int i = 0; int fd; if((fd = open(file, O_RDONLY)) == -1) { perror("open"); return NULL; } if(tag_read_id3_header(fd, &header) == -1) { printf("header invalide"); return NULL; } while(tag_read_one_frame(fd, &(frames[i])) == 0) { i++; frames = realloc(frames, sizeof(id3v2_frame_t) * (i + 1)); } *frame_array_size = i; if(i == 0){ return NULL; } return frames; }
void test_read_header(){ int fd = open_file(); id3v2_header_t * header = malloc(sizeof(id3v2_header_t)); assertTrue_int("Header Read",tag_read_id3_header(fd,header),0); assertTrue_char("Header format ID3", header->ID3,"ID3"); assertTrue_hexa("Header version", header->version,0x0300); assertTrue_hexa("Header size",header->size,0x1e6fa); close(fd); }