diff options
-rw-r--r-- | include/libnsgif.h | 11 | ||||
-rw-r--r-- | src/libnsgif.c | 48 | ||||
-rw-r--r-- | test/decode_gif.c | 3 |
3 files changed, 19 insertions, 43 deletions
diff --git a/include/libnsgif.h b/include/libnsgif.h index 5bd26b4..309e2f0 100644 --- a/include/libnsgif.h +++ b/include/libnsgif.h @@ -23,9 +23,9 @@ typedef enum { GIF_WORKING = 1, GIF_OK = 0, - GIF_INSUFFICIENT_FRAME_DATA = -1, + GIF_INSUFFICIENT_DATA = -1, + GIF_INSUFFICIENT_FRAME_DATA = GIF_INSUFFICIENT_DATA, GIF_FRAME_DATA_ERROR = -2, - GIF_INSUFFICIENT_DATA = -3, GIF_DATA_ERROR = -4, GIF_INSUFFICIENT_MEMORY = -5, GIF_FRAME_NO_DISPLAY = -6, @@ -166,11 +166,9 @@ void gif_create(gif_animation *gif, gif_bitmap_callback_vt *bitmap_callbacks); * * \return Error return value. * - GIF_FRAME_DATA_ERROR for GIF frame data error - * - GIF_INSUFFICIENT_FRAME_DATA for insufficient data to process - * any more frames + * - GIF_INSUFFICIENT_DATA reached unexpected end of source data * - GIF_INSUFFICIENT_MEMORY for memory error * - GIF_DATA_ERROR for GIF error - * - GIF_INSUFFICIENT_DATA for insufficient data to do anything * - GIF_OK for successful decoding * - GIF_WORKING for successful decoding if more frames are expected */ @@ -181,9 +179,8 @@ gif_result gif_initialise(gif_animation *gif, size_t size, const uint8_t *data); * * \return Error return value. * - GIF_FRAME_DATA_ERROR for GIF frame data error - * - GIF_INSUFFICIENT_FRAME_DATA for insufficient data to complete the frame * - GIF_DATA_ERROR for GIF error (invalid frame header) - * - GIF_INSUFFICIENT_DATA for insufficient data to do anything + * - GIF_INSUFFICIENT_DATA reached unexpected end of source data * - GIF_INSUFFICIENT_MEMORY for insufficient memory to process * - GIF_OK for successful decoding */ diff --git a/src/libnsgif.c b/src/libnsgif.c index f0fab44..457ce00 100644 --- a/src/libnsgif.c +++ b/src/libnsgif.c @@ -77,7 +77,7 @@ static gif_result gif_error_from_lzw(lzw_result l_res) [LZW_OK] = GIF_OK, [LZW_OK_EOD] = GIF_END_OF_FRAME, [LZW_NO_MEM] = GIF_INSUFFICIENT_MEMORY, - [LZW_NO_DATA] = GIF_INSUFFICIENT_FRAME_DATA, + [LZW_NO_DATA] = GIF_INSUFFICIENT_DATA, [LZW_EOI_CODE] = GIF_FRAME_DATA_ERROR, [LZW_BAD_ICODE] = GIF_FRAME_DATA_ERROR, [LZW_BAD_CODE] = GIF_FRAME_DATA_ERROR, @@ -560,7 +560,7 @@ static gif_result gif__update_bitmap( * \param[in] frame The gif object we're decoding. * \param[in] data The data to decode. * \param[in] len Byte length of data. - * \return GIF_INSUFFICIENT_FRAME_DATA if more data is needed, + * \return GIF_INSUFFICIENT_DATA if more data is needed, * GIF_OK for success. */ static gif_result gif__parse_extension_graphic_control( @@ -581,7 +581,7 @@ static gif_result gif__parse_extension_graphic_control( * +5 CHAR Transparent Color Index */ if (len < 6) { - return GIF_INSUFFICIENT_FRAME_DATA; + return GIF_INSUFFICIENT_DATA; } frame->frame_delay = data[3] | (data[4] << 8); @@ -616,7 +616,7 @@ static gif_result gif__parse_extension_graphic_control( * \param[in] gif The gif object we're decoding. * \param[in] data The data to decode. * \param[in] len Byte length of data. - * \return GIF_INSUFFICIENT_FRAME_DATA if more data is needed, + * \return GIF_INSUFFICIENT_DATA if more data is needed, * GIF_OK for success. */ static gif_result gif__parse_extension_application( @@ -633,7 +633,7 @@ static gif_result gif__parse_extension_application( * +13 1-256 Application Data (Data sub-blocks) */ if (len < 17) { - return GIF_INSUFFICIENT_FRAME_DATA; + return GIF_INSUFFICIENT_DATA; } if ((data[1] == 0x0b) && @@ -651,7 +651,7 @@ static gif_result gif__parse_extension_application( * \param[in] gif The gif object we're decoding. * \param[in] frame The frame to parse extensions for. * \param[in] decode Whether to decode or skip over the extension. - * \return GIF_INSUFFICIENT_FRAME_DATA if more data is needed, + * \return GIF_INSUFFICIENT_DATA if more data is needed, * GIF_OK for success. */ static gif_result gif__parse_frame_extensions( @@ -673,7 +673,7 @@ static gif_result gif__parse_frame_extensions( gif_bytes--; if (gif_bytes == 0) { - return GIF_INSUFFICIENT_FRAME_DATA; + return GIF_INSUFFICIENT_DATA; } /* Switch on extension label */ @@ -715,7 +715,7 @@ static gif_result gif__parse_frame_extensions( * the extension size itself */ if (gif_bytes < 2) { - return GIF_INSUFFICIENT_FRAME_DATA; + return GIF_INSUFFICIENT_DATA; } gif_data += 2 + gif_data[1]; } @@ -725,7 +725,7 @@ static gif_result gif__parse_frame_extensions( while (gif_data < gif_end && gif_data[0] != GIF_BLOCK_TERMINATOR) { gif_data += gif_data[0] + 1; if (gif_data >= gif_end) { - return GIF_INSUFFICIENT_FRAME_DATA; + return GIF_INSUFFICIENT_DATA; } } gif_data++; @@ -779,7 +779,7 @@ static gif_result gif__parse_image_descriptor( assert(frame != NULL); if (len < GIF_IMAGE_DESCRIPTOR_LEN) { - return GIF_INSUFFICIENT_FRAME_DATA; + return GIF_INSUFFICIENT_DATA; } if (decode) { @@ -830,11 +830,7 @@ static gif_result gif__colour_table_extract( size_t len = gif->gif_data + gif->buffer_size - data; if (len < colour_table_entries * 3) { - if (colour_table == gif->local_colour_table) { - return GIF_INSUFFICIENT_FRAME_DATA; - } else { - return GIF_INSUFFICIENT_DATA; - } + return GIF_INSUFFICIENT_DATA; } if (decode) { @@ -935,7 +931,7 @@ static gif_result gif__parse_image_data( /* Fall through. */ case 1: if (data[0] == GIF_TRAILER) return GIF_OK; /* Fall through. */ - case 0: return GIF_INSUFFICIENT_FRAME_DATA; + case 0: return GIF_INSUFFICIENT_DATA; } minimum_code_size = data[0]; @@ -953,7 +949,7 @@ static gif_result gif__parse_image_data( len--; while (block_size != 1) { - if (len < 1) return GIF_INSUFFICIENT_FRAME_DATA; + if (len < 1) return GIF_INSUFFICIENT_DATA; block_size = data[0] + 1; /* Check if the frame data runs off the end of the file */ if (block_size > len) { @@ -971,7 +967,7 @@ static gif_result gif__parse_image_data( /* Check if we've finished */ if (len < 1) { - return GIF_INSUFFICIENT_FRAME_DATA; + return GIF_INSUFFICIENT_DATA; } else { if (data[0] == GIF_TRAILER) { return GIF_OK; @@ -1026,10 +1022,9 @@ static struct gif_frame *gif__get_frame( * \param[in] frame_idx The frame number to decode. * \param[in] decode Whether to decode the graphical image data. * \return error code - * - GIF_INSUFFICIENT_DATA for insufficient data to do anything + * - GIF_INSUFFICIENT_DATA reached unexpected end of source data. * - GIF_FRAME_DATA_ERROR for GIF frame data error * - GIF_INSUFFICIENT_MEMORY for insufficient memory to process - * - GIF_INSUFFICIENT_FRAME_DATA for insufficient data to complete the frame * - GIF_DATA_ERROR for GIF error (invalid frame header) * - GIF_OK for successful decoding * - GIF_WORKING for successful decoding if more frames are expected @@ -1326,19 +1321,6 @@ gif_result gif_initialise(gif_animation *gif, size_t size, const uint8_t *data) /* Repeatedly try to initialise frames */ while ((ret = gif__process_frame(gif, gif->frame_count, false)) == GIF_WORKING); - /* If there was a memory error tell the caller */ - if ((ret == GIF_INSUFFICIENT_MEMORY) || - (ret == GIF_DATA_ERROR)) { - return ret; - } - - /* If we didn't have some frames then a GIF_INSUFFICIENT_DATA becomes a - * GIF_INSUFFICIENT_FRAME_DATA - */ - if (ret == GIF_INSUFFICIENT_DATA && gif->frame_count_partial > 0) { - return GIF_INSUFFICIENT_FRAME_DATA; - } - return ret; } diff --git a/test/decode_gif.c b/test/decode_gif.c index 64387ef..52d73b6 100644 --- a/test/decode_gif.c +++ b/test/decode_gif.c @@ -113,9 +113,6 @@ static void warning(const char *context, gif_result code) fprintf(stderr, "%s failed: ", context); switch (code) { - case GIF_INSUFFICIENT_FRAME_DATA: - fprintf(stderr, "GIF_INSUFFICIENT_FRAME_DATA"); - break; case GIF_FRAME_DATA_ERROR: fprintf(stderr, "GIF_FRAME_DATA_ERROR"); break; |