ref: f68e997ecefd77b3d1cd33c21264d5ced6e5d021
dir: /tags.c/
#include "tagspriv.h" typedef struct Getter Getter; struct Getter { int (*f)(Tagctx *ctx); int format; }; static const Getter g[] = { {tagid3v2, Fmp3}, {tagid3v1, Fmp3}, {tagvorbis, Fvorbis}, {tagflac, Fflac}, {tagm4a, Fm4a}, {tagopus, Fopus}, {tagwav, Fwav}, {tagit, Fit}, {tagxm, Fxm}, {tags3m, Fs3m}, {tagmod, Fmod}, }; void tagscallcb(Tagctx *ctx, int type, Tag *tag) { char *s, *e; if(type != Timage){ for(s = tag->text.v; (uint8_t)*s <= ' ' && *s; s++); e = s + strlen(s); while(e != s && (uint8_t)e[-1] <= ' ') e--; if(*e != 0) *e = 0; if(*s == 0) return; tag->text.v = s; } ctx->tag(ctx, type, tag); if(type != Tunknown) ctx->found |= 1<<type; } int tagsget(Tagctx *ctx) { int i, res; ctx->channels = ctx->samplerate = ctx->bitrate = ctx->duration = 0; ctx->found = 0; ctx->format = Funknown; ctx->restart = 0; res = -1; for(i = 0; i < nelem(g); i++){ if(g[i].f(ctx) == 0){ ctx->format = g[i].format; res = 0; } ctx->seek(ctx, ctx->restart, 0); } return res; }