add more reserved space to CUESHEET implementation
authorJosh Coalson <jcoalson@users.sourceforce.net>
Sat, 16 Nov 2002 06:31:54 +0000 (06:31 +0000)
committerJosh Coalson <jcoalson@users.sourceforce.net>
Sat, 16 Nov 2002 06:31:54 +0000 (06:31 +0000)
include/FLAC/format.h
src/libFLAC/format.c
src/libFLAC/metadata_iterators.c
src/libFLAC/stream_decoder.c
src/libFLAC/stream_encoder_framing.c

index 4b4a68d..1f97c04 100644 (file)
@@ -663,7 +663,9 @@ typedef struct {
 
 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN; /**< == 128*8 (bits) */
 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN; /**< == 64 (bits) */
+extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN; /**< == @@@@256*8 (bits) */
 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN; /**< == 8 (bits) */
+/*@@@@@ RESERVED SPACE HERE*/
 
 
 /** FLAC metadata block structure.  (c.f. <A HREF="../format.html#metadata_block">format specification</A>)
index 53afb3f..81d00e7 100644 (file)
@@ -81,6 +81,7 @@ FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN = 8
 
 FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN = 128*8; /* bits */
 FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN = 64; /* bits */
+FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN = 256*8; /* bits @@@@256 */
 FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN = 8; /* bits */
 
 FLAC_API const unsigned FLAC__STREAM_METADATA_IS_LAST_LEN = 1; /* bits */
index 8466a91..618e3ba 100644 (file)
@@ -1521,7 +1521,7 @@ FLAC__Metadata_SimpleIteratorStatus read_metadata_block_data_vorbis_comment_(FIL
        if(block->num_comments == 0) {
                block->comments = 0;
        }
-       else if(0 == (block->comments = (FLAC__StreamMetadata_VorbisComment_Entry*)calloc(sizeof(FLAC__StreamMetadata_VorbisComment_Entry), block->num_comments)))
+       else if(0 == (block->comments = (FLAC__StreamMetadata_VorbisComment_Entry*)calloc(block->num_comments, sizeof(FLAC__StreamMetadata_VorbisComment_Entry))))
                return FLAC__METADATA_SIMPLE_ITERATOR_STATUS_MEMORY_ALLOCATION_ERROR;
 
        for(i = 0; i < block->num_comments; i++) {
@@ -1607,7 +1607,7 @@ FLAC__Metadata_SimpleIteratorStatus read_metadata_block_data_cuesheet_(FILE *fil
 {
        unsigned i, len;
        FLAC__Metadata_SimpleIteratorStatus status;
-       FLAC__byte buffer[sizeof(FLAC__uint64)]; /* the largest object we'll read in one shot */
+       FLAC__byte buffer[max(sizeof(FLAC__uint64), FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN/8)]; /* the largest object we'll read in one shot */
 
        FLAC__ASSERT(0 != file);
 
@@ -1622,6 +1622,11 @@ FLAC__Metadata_SimpleIteratorStatus read_metadata_block_data_cuesheet_(FILE *fil
                return FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR;
        block->lead_in = unpack_uint64_(buffer, len);
 
+       FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN % 8 == 0);
+       len = FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN / 8;
+       if(fread(buffer, 1, len, file) != len)
+               return FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR;
+
        FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN % 8 == 0);
        len = FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN / 8;
        if(fread(buffer, 1, len, file) != len)
@@ -1814,9 +1819,10 @@ FLAC__Metadata_SimpleIteratorStatus write_metadata_block_data_vorbis_comment_(FI
 FLAC__Metadata_SimpleIteratorStatus write_metadata_block_data_cuesheet_(FILE *file, const FLAC__StreamMetadata_CueSheet *block)
 {
        unsigned i, j, len;
-       FLAC__byte buffer[32]; /* asserted below that this is big enough */
+       FLAC__byte buffer[1024]; /* asserted below that this is big enough */
 
        FLAC__ASSERT(sizeof(buffer) >= sizeof(FLAC__uint64));
+       FLAC__ASSERT(sizeof(buffer) >= FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN/8);
        FLAC__ASSERT(sizeof(buffer) >= (FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN + FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN + FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN)/8);
        FLAC__ASSERT(sizeof(buffer) >= FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN/8);
 
@@ -1833,6 +1839,12 @@ FLAC__Metadata_SimpleIteratorStatus write_metadata_block_data_cuesheet_(FILE *fi
        if(fwrite(buffer, 1, len, file) != len)
                return FLAC__METADATA_SIMPLE_ITERATOR_STATUS_WRITE_ERROR;
 
+       FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN % 8 == 0);
+       len = FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN / 8;
+       memset(buffer, 0, len);
+       if(fwrite(buffer, 1, len, file) != len)
+               return FLAC__METADATA_SIMPLE_ITERATOR_STATUS_WRITE_ERROR;
+
        FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN % 8 == 0);
        len = FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN / 8;
        pack_uint32_(block->num_tracks, buffer, len);
index 3651a2d..0071eba 100644 (file)
@@ -1128,6 +1128,9 @@ FLAC__bool read_metadata_cuesheet_(FLAC__StreamDecoder *decoder, FLAC__StreamMet
        if(!FLAC__bitbuffer_read_raw_uint64(decoder->private_->input, &obj->lead_in, FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN, read_callback_, decoder))
                return false; /* the read_callback_ sets the state for us */
 
+       if(!FLAC__bitbuffer_skip_bits_no_crc(decoder->private_->input, FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN, read_callback_, decoder))
+               return false; /* the read_callback_ sets the state for us */
+
        if(!FLAC__bitbuffer_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN, read_callback_, decoder))
                return false; /* the read_callback_ sets the state for us */
        obj->num_tracks = x;
index 3d4cf27..e0afb6a 100644 (file)
@@ -125,6 +125,8 @@ FLAC__bool FLAC__add_metadata_block(const FLAC__StreamMetadata *metadata, FLAC__
                                return false;
                        if(!FLAC__bitbuffer_write_raw_uint64(bb, metadata->data.cue_sheet.lead_in, FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN))
                                return false;
+                       if(!FLAC__bitbuffer_write_zeroes(bb, FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN))
+                               return false;
                        if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.cue_sheet.num_tracks, FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN))
                                return false;
                        for(i = 0; i < metadata->data.cue_sheet.num_tracks; i++) {