ref: a1aa7038ba62a46b1173b609e4c884b1919d3949
dir: /vorbis.c/
#include <u.h>
#include <libc.h>
#include <thread.h>
#include <draw.h>
#include "dat.h"
#include "fncs.h"
VorbisMeta*
parseVorbisMeta(int fd, uvlong offset)
{
u32int size;
uchar buf[1024];
uint i;
VorbisMeta *v;
char *sep;
v = emalloc(sizeof(VorbisMeta));
/* Vendor String */
pread(fd, buf, 4, offset);
size = lebtoi(buf, 4);
offset+=size+4;
pread(fd, buf, 4, offset);
v->ncom = lebtoi(buf, 4);
v->key = emalloc(sizeof(Rune*) * v->ncom);
v->val = emalloc(sizeof(Rune*) * v->ncom);
offset+=4;
for(i=0;i<v->ncom;i++){
pread(fd, buf, 4, offset);
size = lebtoi(buf, 4);
offset+=4;
pread(fd, buf, size, offset);
offset+=size;
buf[size] = '\0';
sep = strchr((char*)buf, '=');
if(sep == nil){
fprint(2, "Invalid vorbis header format\n");
quit("Invalid vorbis header format");
continue;
}
*sep = '\0';
v->key[i] = runesmprint("%s", (char*)buf);
v->val[i] = runesmprint("%s", sep+1);
}
return v;
}