FLAC__bool remove_vc_firstfield(const char *filename, FLAC__StreamMetadata *block, const char *field_name, FLAC__bool *needs_write) { int n; FLAC__ASSERT(0 != needs_write); n = FLAC__metadata_object_vorbiscomment_remove_entry_matching(block, field_name); if(n < 0) { fprintf(stderr, "%s: ERROR: memory allocation failure\n", filename); return false; } else if(n > 0) *needs_write = true; return true; }
// ======================================== // Vorbis comment utilities // ======================================== static bool SetVorbisComment(FLAC__StreamMetadata *block, const char *key, CFStringRef value) { assert(NULL != block); assert(NULL != key); // Remove the existing comment with this name if(-1 == FLAC__metadata_object_vorbiscomment_remove_entry_matching(block, key)) { log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger("org.sbooth.AudioEngine.AudioMetadata.FLAC"); LOG4CXX_WARN(logger, "FLAC__metadata_object_vorbiscomment_remove_entry_matching() failed"); return false; } // Nothing left to do if value is NULL if(NULL == value) return true; CFIndex valueCStringSize = CFStringGetMaximumSizeForEncoding(CFStringGetLength(value), kCFStringEncodingUTF8) + 1; char valueCString [valueCStringSize]; if(!CFStringGetCString(value, valueCString, valueCStringSize, kCFStringEncodingUTF8)) { log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger("org.sbooth.AudioEngine.AudioMetadata.FLAC"); LOG4CXX_WARN(logger, "CFStringGetCString() failed"); return false; } FLAC__StreamMetadata_VorbisComment_Entry entry; if(!FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair(&entry, key, valueCString)) { log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger("org.sbooth.AudioEngine.AudioMetadata.FLAC"); LOG4CXX_WARN(logger, "FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair() failed"); return false; } if(!FLAC__metadata_object_vorbiscomment_replace_comment(block, entry, false, false)) { log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger("org.sbooth.AudioEngine.AudioMetadata.FLAC"); LOG4CXX_WARN(logger, "FLAC__metadata_object_vorbiscomment_replace_comment() failed"); return false; } return true; }