- return membuffer_write(buf, temp, 4);
-}
-
-static void membuffer_write_track_tag(struct membuffer *buf, const char *name,
- uint32_t index, uint32_t total)
-{
- membuffer_write_int32(buf,
- 8 /*atom header */ + 8 /*data atom header */ +
- 8 /*flags + reserved */ + 8 /*actual data */ );
- membuffer_write_atom_name(buf, name);
- membuffer_write_int32(buf,
- 8 /*data atom header */ +
- 8 /*flags + reserved */ + 8 /*actual data */ );
- membuffer_write_atom_name(buf, "data");
- membuffer_write_int32(buf, 0); //flags
- membuffer_write_int32(buf, 0); //reserved
- membuffer_write_int16(buf, 0);
- membuffer_write_int16(buf, (uint16_t) index); //track number
- membuffer_write_int16(buf, (uint16_t) total); //total tracks
- membuffer_write_int16(buf, 0);
-}
-
-static void membuffer_write_int16_tag(struct membuffer *buf, const char *name,
- uint16_t value)
-{
- membuffer_write_int32(buf,
- 8 /*atom header */ + 8 /*data atom header */ +
- 8 /*flags + reserved */ + 2 /*actual data */ );
- membuffer_write_atom_name(buf, name);
- membuffer_write_int32(buf,
- 8 /*data atom header */ +
- 8 /*flags + reserved */ + 2 /*actual data */ );
- membuffer_write_atom_name(buf, "data");
- membuffer_write_int32(buf, 0); //flags
- membuffer_write_int32(buf, 0); //reserved
- membuffer_write_int16(buf, value); //value
-}
-
-static uint32_t myatoi(const char *param)
-{
- return param ? atoi(param) : 0;
-}
-
-static uint32_t meta_genre_to_index(const char *genrestr)
-{
- unsigned n;
- for (n = 0; n < sizeof (ID3v1GenreList) / sizeof (ID3v1GenreList[0]); n++) {
- if (!strcasecmp(genrestr, ID3v1GenreList[n]))
- return n + 1;
- }
- return 0;
-}
-
-struct stdmeta_entry {
- const char *atom;
- const char *name;
-};
-
-struct stdmeta_entry stdmetas[] = {
- {"\xA9" "nam", "title"},
- {"\xA9" "ART", "artist"},
- {"\xA9" "wrt", "writer"},
- {"\xA9" "alb", "album"},
- {"\xA9" "day", "date"},
- {"\xA9" "too", "tool"},
- {"\xA9" "cmt", "comment"},
- {"cpil", "compilation"},
- {"covr", "cover"},
- {"aART", "album_artist"},
-};
-
-static const char *find_standard_meta(const char *name) //returns atom name if found, 0 if not
-{
- unsigned n;
- for (n = 0; n < sizeof (stdmetas) / sizeof (stdmetas[0]); n++) {
- if (!strcasecmp(name, stdmetas[n].name))
- return stdmetas[n].atom;
- }
- return 0;
-}
-
-static void membuffer_write_std_tag(struct membuffer *buf, const char *name,
- const char *value)
-{
- uint32_t flags = 1;
-
- /* special check for compilation flag */
- if (strcmp(name, "cpil") == 0) {
- flags = 21;
- }
-
- membuffer_write_int32(buf,
- 8 /*atom header */ + 8 /*data atom header */ +
- 8 /*flags + reserved */ + strlen(value));
- membuffer_write_atom_name(buf, name);
- membuffer_write_int32(buf,
- 8 /*data atom header */ +
- 8 /*flags + reserved */ + strlen(value));
- membuffer_write_atom_name(buf, "data");
- membuffer_write_int32(buf, flags); //flags
- membuffer_write_int32(buf, 0); //reserved
- membuffer_write(buf, value, strlen(value));
-}
-
-static void membuffer_write_custom_tag(struct membuffer *buf, const char *name,
- const char *value)
-{
- membuffer_write_int32(buf,
- 8 /*atom header */ +
- 0x1C /*weirdo itunes atom */ +
- 12 /*name atom header */ + strlen(name) +
- 16 /*data atom header + flags */ + strlen(value));
- membuffer_write_atom_name(buf, "----");
- membuffer_write_int32(buf, 0x1C); //weirdo itunes atom
- membuffer_write_atom_name(buf, "mean");
- membuffer_write_int32(buf, 0);
- membuffer_write(buf, "com.apple.iTunes", 16);
- membuffer_write_int32(buf, 12 + strlen(name));
- membuffer_write_atom_name(buf, "name");
- membuffer_write_int32(buf, 0);
- membuffer_write(buf, name, strlen(name));
- membuffer_write_int32(buf,
- 8 /*data atom header */ +
- 8 /*flags + reserved */ + strlen(value));
- membuffer_write_atom_name(buf, "data");
- membuffer_write_int32(buf, 1); //flags
- membuffer_write_int32(buf, 0); //reserved
- membuffer_write(buf, value, strlen(value));
-}
-
-static unsigned membuffer_error(const struct membuffer *buf)
-{
- return buf->error;
-}
-
-static void membuffer_free(struct membuffer *buf)
-{
- free(buf->data);
- free(buf);