-
- /* some need special attention */
- if (parent == ATOM_GENRE2 || parent == ATOM_TEMPO) {
- uint16_t val;
- if (subsize - header_size < min_body_size(parent))
- continue;
- val = read_int16(f);
- if (parent == ATOM_TEMPO) {
- char temp[16];
- sprintf(temp, "%.5u BPM", val);
- tag_add_field(&(f-> tags), "tempo",
- temp, -1);
- } else {
- const char *tmp = meta_index_to_genre(val);
- if (tmp)
- tag_add_field (&(f->tags),
- "genre", tmp, -1);
- }
- done = 1;
- } else if (parent == ATOM_TRACK || parent == ATOM_DISC) {
- uint16_t index, total;
- char temp[32];
- if (subsize - header_size < min_body_size(parent))
- continue;
- read_int16(f);
- index = read_int16(f);
- total = read_int16(f);
- if (parent == ATOM_TRACK)
- read_int16(f);
- sprintf(temp, "%d", index);
- tag_add_field(&(f->tags), parent == ATOM_TRACK?
- "track" : "disc", temp, -1);
- if (total > 0) {
- sprintf(temp, "%d", total);
- tag_add_field(& (f-> tags),
- parent == ATOM_TRACK?
- "totaltracks" : "totaldiscs", temp, -1);
- }
- done = 1;
- } else {
- free(data);
- data = read_string(f, subsize - (header_size + 8));
- len = subsize - (header_size + 8);
- }
- }
- if (data) {
- if (!done) {
- if (name == NULL)
- set_metadata_name(parent , &name);
- if (name)
- tag_add_field(&(f->tags), name, data, len);
- }
-