Beispiel #1
0
/**
 * @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;

}
Beispiel #2
0
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);
}