diff options
author | Max Kellermann <max@duempel.org> | 2013-12-14 13:38:08 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2013-12-14 13:44:57 +0100 |
commit | 8297563978d22c9e7fe9346ec997ea58c3988797 (patch) | |
tree | e6ac8c590a3aa48a5b6081837c087351169988b9 | |
parent | 1da0526072db26a9a84c68cba45e511aee0641fa (diff) | |
download | mpd-8297563978d22c9e7fe9346ec997ea58c3988797.tar.gz mpd-8297563978d22c9e7fe9346ec997ea58c3988797.tar.xz mpd-8297563978d22c9e7fe9346ec997ea58c3988797.zip |
decoder/flac: simplify the comment parsers
Diffstat (limited to '')
-rw-r--r-- | src/decoder/FlacMetadata.cxx | 56 |
1 files changed, 26 insertions, 30 deletions
diff --git a/src/decoder/FlacMetadata.cxx b/src/decoder/FlacMetadata.cxx index b3dbc6114..f5aef7309 100644 --- a/src/decoder/FlacMetadata.cxx +++ b/src/decoder/FlacMetadata.cxx @@ -30,27 +30,35 @@ #include <string.h> +static const char * +vorbis_comment_value(const FLAC__StreamMetadata *block, + const char *name) +{ + int offset = + FLAC__metadata_object_vorbiscomment_find_entry_from(block, 0, + name); + if (offset < 0) + return nullptr; + + size_t name_length = strlen(name); + + const FLAC__StreamMetadata_VorbisComment_Entry &vc = + block->data.vorbis_comment.comments[offset]; + const char *comment = (const char *)vc.entry; + + /* 1 is for '=' */ + return comment + name_length + 1; +} + static bool flac_find_float_comment(const FLAC__StreamMetadata *block, const char *cmnt, float *fl) { - int offset; - size_t pos; - int len; - unsigned char *p; - - offset = FLAC__metadata_object_vorbiscomment_find_entry_from(block, 0, - cmnt); - if (offset < 0) - return false; - - pos = strlen(cmnt) + 1; /* 1 is for '=' */ - len = block->data.vorbis_comment.comments[offset].length - pos; - if (len <= 0) + const char *value = vorbis_comment_value(block, cmnt); + if (value == nullptr) return false; - p = &block->data.vorbis_comment.comments[offset].entry[pos]; - *fl = (float)atof((char *)p); + *fl = (float)atof(value); return true; } @@ -81,23 +89,11 @@ gcc_pure static std::string flac_find_string_comment(const FLAC__StreamMetadata *block, const char *cmnt) { - int offset; - size_t pos; - int len; - const unsigned char *p; - - offset = FLAC__metadata_object_vorbiscomment_find_entry_from(block, 0, - cmnt); - if (offset < 0) - return std::string(); - - pos = strlen(cmnt) + 1; /* 1 is for '=' */ - len = block->data.vorbis_comment.comments[offset].length - pos; - if (len <= 0) + const char *value = vorbis_comment_value(block, cmnt); + if (value == nullptr) return std::string(); - p = &block->data.vorbis_comment.comments[offset].entry[pos]; - return std::string((const char *)p, len); + return std::string(value); } MixRampInfo |