#include "item.h" #include "flags.h" #include "util.h" #include #include /* http://wiki.hydrogenaudio.org/index.php?title=APE_Tag_Item */ APEv2::Item::Item() { refCount=1; len=0; flags=0; key=0; value=0; } APEv2::Item::~Item() { free(key); free(value); } void APEv2::Item::Retain() { refCount++; } void APEv2::Item::Release() { if (--refCount == 0) delete this; } int APEv2::Item::Read(void *_data, size_t datalen, void **new_data, size_t *new_len) { char *data = (char *)_data; if (datalen < 4) return APEV2_TOO_SMALL; memcpy(&len, data, 4); len = ATON32(len); data+=4; datalen-=4; if (datalen < 4) return APEV2_TOO_SMALL; memcpy(&flags, data, 4); flags = ATON32(flags); data+=4; datalen-=4; uint32_t key_len=0; for (uint32_t i=0;i