From 62f32ccb010070501ed2d518d31cb788e37f7b3d Mon Sep 17 00:00:00 2001 From: Warren Dukes Date: Sun, 6 Jun 2004 22:13:23 +0000 Subject: harden metadatabuffer git-svn-id: https://svn.musicpd.org/mpd/trunk@1362 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- src/outputBuffer.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'src/outputBuffer.c') diff --git a/src/outputBuffer.c b/src/outputBuffer.c index 660067c27..a62d97778 100644 --- a/src/outputBuffer.c +++ b/src/outputBuffer.c @@ -29,10 +29,25 @@ static mpd_sint16 currentChunk = -1; static mpd_sint8 currentMetaChunk = -1; static mpd_sint8 sendMetaChunk = 0; +void clearAllMetaChunkSets(OutputBuffer * cb) { + int i; + + for(i=0; imetaChunkSet[i] = 0; + } +} + void clearOutputBuffer(OutputBuffer * cb) { currentChunk = -1; cb->end = cb->begin; cb->wrap = 0; + + if(cb->acceptMetadata) { + clearAllMetaChunkSets(cb); + if(sendMetaChunk == 0 && currentMetaChunk >= 0) { + cb->metaChunkSet[currentChunk] = 1; + } + } } void flushOutputBuffer(OutputBuffer * cb) { @@ -126,20 +141,28 @@ int sendDataToOutputBuffer(OutputBuffer * cb, InputStream * inStream, } int copyMpdTagToOutputBuffer(OutputBuffer * cb, MpdTag * tag) { + int nextChunk; + printf("copyMpdTagToOB called\n"); if(!cb->acceptMetadata || !tag) { sendMetaChunk = 0; - return -1; + return 0; } sendMetaChunk = 1; - currentMetaChunk++; - if(currentMetaChunk >= BUFFERED_METACHUNKS) currentMetaChunk = 0; + nextChunk = currentMetaChunk+1; + if(nextChunk >= BUFFERED_METACHUNKS) nextChunk = 0; + + if(cb->metaChunkSet[nextChunk]) return -1; + + currentMetaChunk = nextChunk; printMpdTag(stdout, tag); copyMpdTagToMetadataChunk(tag, &(cb->metadataChunks[currentMetaChunk])); + cb->metaChunkSet[nextChunk] = 1; + return 0; } -- cgit v1.2.3