| common.c | common.c | |||
|---|---|---|---|---|
| skipping to change at line 36 | skipping to change at line 36 | |||
| lzma_version_string(void) | lzma_version_string(void) | |||
| { | { | |||
| return LZMA_VERSION_STRING; | return LZMA_VERSION_STRING; | |||
| } | } | |||
| /////////////////////// | /////////////////////// | |||
| // Memory allocation // | // Memory allocation // | |||
| /////////////////////// | /////////////////////// | |||
| extern void * lzma_attribute((__malloc__)) lzma_attr_alloc_size(1) | extern void * lzma_attribute((__malloc__)) lzma_attr_alloc_size(1) | |||
| lzma_alloc(size_t size, lzma_allocator *allocator) | lzma_alloc(size_t size, const lzma_allocator *allocator) | |||
| { | { | |||
| // Some malloc() variants return NULL if called with size == 0. | // Some malloc() variants return NULL if called with size == 0. | |||
| if (size == 0) | if (size == 0) | |||
| size = 1; | size = 1; | |||
| void *ptr; | void *ptr; | |||
| if (allocator != NULL && allocator->alloc != NULL) | if (allocator != NULL && allocator->alloc != NULL) | |||
| ptr = allocator->alloc(allocator->opaque, 1, size); | ptr = allocator->alloc(allocator->opaque, 1, size); | |||
| else | else | |||
| ptr = malloc(size); | ptr = malloc(size); | |||
| return ptr; | return ptr; | |||
| } | } | |||
| extern void * lzma_attribute((__malloc__)) lzma_attr_alloc_size(1) | ||||
| lzma_alloc_zero(size_t size, const lzma_allocator *allocator) | ||||
| { | ||||
| // Some calloc() variants return NULL if called with size == 0. | ||||
| if (size == 0) | ||||
| size = 1; | ||||
| void *ptr; | ||||
| if (allocator != NULL && allocator->alloc != NULL) { | ||||
| ptr = allocator->alloc(allocator->opaque, 1, size); | ||||
| if (ptr != NULL) | ||||
| memzero(ptr, size); | ||||
| } else { | ||||
| ptr = calloc(1, size); | ||||
| } | ||||
| return ptr; | ||||
| } | ||||
| extern void | extern void | |||
| lzma_free(void *ptr, lzma_allocator *allocator) | lzma_free(void *ptr, const lzma_allocator *allocator) | |||
| { | { | |||
| if (allocator != NULL && allocator->free != NULL) | if (allocator != NULL && allocator->free != NULL) | |||
| allocator->free(allocator->opaque, ptr); | allocator->free(allocator->opaque, ptr); | |||
| else | else | |||
| free(ptr); | free(ptr); | |||
| return; | return; | |||
| } | } | |||
| ////////// | ////////// | |||
| skipping to change at line 85 | skipping to change at line 105 | |||
| memcpy(out + *out_pos, in + *in_pos, copy_size); | memcpy(out + *out_pos, in + *in_pos, copy_size); | |||
| *in_pos += copy_size; | *in_pos += copy_size; | |||
| *out_pos += copy_size; | *out_pos += copy_size; | |||
| return copy_size; | return copy_size; | |||
| } | } | |||
| extern lzma_ret | extern lzma_ret | |||
| lzma_next_filter_init(lzma_next_coder *next, lzma_allocator *allocator, | lzma_next_filter_init(lzma_next_coder *next, const lzma_allocator *allocato r, | |||
| const lzma_filter_info *filters) | const lzma_filter_info *filters) | |||
| { | { | |||
| lzma_next_coder_init(filters[0].init, next, allocator); | lzma_next_coder_init(filters[0].init, next, allocator); | |||
| next->id = filters[0].id; | next->id = filters[0].id; | |||
| return filters[0].init == NULL | return filters[0].init == NULL | |||
| ? LZMA_OK : filters[0].init(next, allocator, filters ); | ? LZMA_OK : filters[0].init(next, allocator, filters ); | |||
| } | } | |||
| extern lzma_ret | extern lzma_ret | |||
| lzma_next_filter_update(lzma_next_coder *next, lzma_allocator *allocator, | lzma_next_filter_update(lzma_next_coder *next, const lzma_allocator *alloca tor, | |||
| const lzma_filter *reversed_filters) | const lzma_filter *reversed_filters) | |||
| { | { | |||
| // Check that the application isn't trying to change the Filter ID. | // Check that the application isn't trying to change the Filter ID. | |||
| // End of filters is indicated with LZMA_VLI_UNKNOWN in both | // End of filters is indicated with LZMA_VLI_UNKNOWN in both | |||
| // reversed_filters[0].id and next->id. | // reversed_filters[0].id and next->id. | |||
| if (reversed_filters[0].id != next->id) | if (reversed_filters[0].id != next->id) | |||
| return LZMA_PROG_ERROR; | return LZMA_PROG_ERROR; | |||
| if (reversed_filters[0].id == LZMA_VLI_UNKNOWN) | if (reversed_filters[0].id == LZMA_VLI_UNKNOWN) | |||
| return LZMA_OK; | return LZMA_OK; | |||
| assert(next->update != NULL); | assert(next->update != NULL); | |||
| return next->update(next->coder, allocator, NULL, reversed_filters); | return next->update(next->coder, allocator, NULL, reversed_filters); | |||
| } | } | |||
| extern void | extern void | |||
| lzma_next_end(lzma_next_coder *next, lzma_allocator *allocator) | lzma_next_end(lzma_next_coder *next, const lzma_allocator *allocator) | |||
| { | { | |||
| if (next->init != (uintptr_t)(NULL)) { | if (next->init != (uintptr_t)(NULL)) { | |||
| // To avoid tiny end functions that simply call | // To avoid tiny end functions that simply call | |||
| // lzma_free(coder, allocator), we allow leaving next->end | // lzma_free(coder, allocator), we allow leaving next->end | |||
| // NULL and call lzma_free() here. | // NULL and call lzma_free() here. | |||
| if (next->end != NULL) | if (next->end != NULL) | |||
| next->end(next->coder, allocator); | next->end(next->coder, allocator); | |||
| else | else | |||
| lzma_free(next->coder, allocator); | lzma_free(next->coder, allocator); | |||
| skipping to change at line 169 | skipping to change at line 189 | |||
| } | } | |||
| extern LZMA_API(lzma_ret) | extern LZMA_API(lzma_ret) | |||
| lzma_code(lzma_stream *strm, lzma_action action) | lzma_code(lzma_stream *strm, lzma_action action) | |||
| { | { | |||
| // Sanity checks | // Sanity checks | |||
| if ((strm->next_in == NULL && strm->avail_in != 0) | if ((strm->next_in == NULL && strm->avail_in != 0) | |||
| || (strm->next_out == NULL && strm->avail_out != 0) | || (strm->next_out == NULL && strm->avail_out != 0) | |||
| || strm->internal == NULL | || strm->internal == NULL | |||
| || strm->internal->next.code == NULL | || strm->internal->next.code == NULL | |||
| || (unsigned int)(action) > LZMA_FINISH | || (unsigned int)(action) > LZMA_ACTION_MAX | |||
| || !strm->internal->supported_actions[action]) | || !strm->internal->supported_actions[action]) | |||
| return LZMA_PROG_ERROR; | return LZMA_PROG_ERROR; | |||
| // Check if unsupported members have been set to non-zero or non-NUL L, | // Check if unsupported members have been set to non-zero or non-NUL L, | |||
| // which would indicate that some new feature is wanted. | // which would indicate that some new feature is wanted. | |||
| if (strm->reserved_ptr1 != NULL | if (strm->reserved_ptr1 != NULL | |||
| || strm->reserved_ptr2 != NULL | || strm->reserved_ptr2 != NULL | |||
| || strm->reserved_ptr3 != NULL | || strm->reserved_ptr3 != NULL | |||
| || strm->reserved_ptr4 != NULL | || strm->reserved_ptr4 != NULL | |||
| || strm->reserved_int1 != 0 | || strm->reserved_int1 != 0 | |||
| skipping to change at line 204 | skipping to change at line 224 | |||
| strm->internal->sequence = ISEQ_SYNC_FLUSH; | strm->internal->sequence = ISEQ_SYNC_FLUSH; | |||
| break; | break; | |||
| case LZMA_FULL_FLUSH: | case LZMA_FULL_FLUSH: | |||
| strm->internal->sequence = ISEQ_FULL_FLUSH; | strm->internal->sequence = ISEQ_FULL_FLUSH; | |||
| break; | break; | |||
| case LZMA_FINISH: | case LZMA_FINISH: | |||
| strm->internal->sequence = ISEQ_FINISH; | strm->internal->sequence = ISEQ_FINISH; | |||
| break; | break; | |||
| case LZMA_FULL_BARRIER: | ||||
| strm->internal->sequence = ISEQ_FULL_BARRIER; | ||||
| break; | ||||
| } | } | |||
| break; | break; | |||
| case ISEQ_SYNC_FLUSH: | case ISEQ_SYNC_FLUSH: | |||
| // The same action must be used until we return | // The same action must be used until we return | |||
| // LZMA_STREAM_END, and the amount of input must not change. | // LZMA_STREAM_END, and the amount of input must not change. | |||
| if (action != LZMA_SYNC_FLUSH | if (action != LZMA_SYNC_FLUSH | |||
| || strm->internal->avail_in != strm->avail_i n) | || strm->internal->avail_in != strm->avail_i n) | |||
| return LZMA_PROG_ERROR; | return LZMA_PROG_ERROR; | |||
| skipping to change at line 231 | skipping to change at line 255 | |||
| break; | break; | |||
| case ISEQ_FINISH: | case ISEQ_FINISH: | |||
| if (action != LZMA_FINISH | if (action != LZMA_FINISH | |||
| || strm->internal->avail_in != strm->avail_i n) | || strm->internal->avail_in != strm->avail_i n) | |||
| return LZMA_PROG_ERROR; | return LZMA_PROG_ERROR; | |||
| break; | break; | |||
| case ISEQ_FULL_BARRIER: | ||||
| if (action != LZMA_FULL_BARRIER | ||||
| || strm->internal->avail_in != strm->avail_i | ||||
| n) | ||||
| return LZMA_PROG_ERROR; | ||||
| break; | ||||
| case ISEQ_END: | case ISEQ_END: | |||
| return LZMA_STREAM_END; | return LZMA_STREAM_END; | |||
| case ISEQ_ERROR: | case ISEQ_ERROR: | |||
| default: | default: | |||
| return LZMA_PROG_ERROR; | return LZMA_PROG_ERROR; | |||
| } | } | |||
| size_t in_pos = 0; | size_t in_pos = 0; | |||
| size_t out_pos = 0; | size_t out_pos = 0; | |||
| skipping to change at line 281 | skipping to change at line 312 | |||
| } | } | |||
| break; | break; | |||
| case LZMA_TIMED_OUT: | case LZMA_TIMED_OUT: | |||
| strm->internal->allow_buf_error = false; | strm->internal->allow_buf_error = false; | |||
| ret = LZMA_OK; | ret = LZMA_OK; | |||
| break; | break; | |||
| case LZMA_STREAM_END: | case LZMA_STREAM_END: | |||
| if (strm->internal->sequence == ISEQ_SYNC_FLUSH | if (strm->internal->sequence == ISEQ_SYNC_FLUSH | |||
| || strm->internal->sequence == ISEQ_FULL_FLU | || strm->internal->sequence == ISEQ_FULL_FLU | |||
| SH) | SH | |||
| || strm->internal->sequence | ||||
| == ISEQ_FULL_BARRIER) | ||||
| strm->internal->sequence = ISEQ_RUN; | strm->internal->sequence = ISEQ_RUN; | |||
| else | else | |||
| strm->internal->sequence = ISEQ_END; | strm->internal->sequence = ISEQ_END; | |||
| // Fall through | // Fall through | |||
| case LZMA_NO_CHECK: | case LZMA_NO_CHECK: | |||
| case LZMA_UNSUPPORTED_CHECK: | case LZMA_UNSUPPORTED_CHECK: | |||
| case LZMA_GET_CHECK: | case LZMA_GET_CHECK: | |||
| case LZMA_MEMLIMIT_ERROR: | case LZMA_MEMLIMIT_ERROR: | |||
| skipping to change at line 319 | skipping to change at line 352 | |||
| { | { | |||
| if (strm != NULL && strm->internal != NULL) { | if (strm != NULL && strm->internal != NULL) { | |||
| lzma_next_end(&strm->internal->next, strm->allocator); | lzma_next_end(&strm->internal->next, strm->allocator); | |||
| lzma_free(strm->internal, strm->allocator); | lzma_free(strm->internal, strm->allocator); | |||
| strm->internal = NULL; | strm->internal = NULL; | |||
| } | } | |||
| return; | return; | |||
| } | } | |||
| extern LZMA_API(void) | ||||
| lzma_get_progress(lzma_stream *strm, | ||||
| uint64_t *progress_in, uint64_t *progress_out) | ||||
| { | ||||
| if (strm->internal->next.get_progress != NULL) { | ||||
| strm->internal->next.get_progress(strm->internal->next.coder | ||||
| , | ||||
| progress_in, progress_out); | ||||
| } else { | ||||
| *progress_in = strm->total_in; | ||||
| *progress_out = strm->total_out; | ||||
| } | ||||
| return; | ||||
| } | ||||
| extern LZMA_API(lzma_check) | extern LZMA_API(lzma_check) | |||
| lzma_get_check(const lzma_stream *strm) | lzma_get_check(const lzma_stream *strm) | |||
| { | { | |||
| // Return LZMA_CHECK_NONE if we cannot know the check type. | // Return LZMA_CHECK_NONE if we cannot know the check type. | |||
| // It's a bug in the application if this happens. | // It's a bug in the application if this happens. | |||
| if (strm->internal->next.get_check == NULL) | if (strm->internal->next.get_check == NULL) | |||
| return LZMA_CHECK_NONE; | return LZMA_CHECK_NONE; | |||
| return strm->internal->next.get_check(strm->internal->next.coder); | return strm->internal->next.get_check(strm->internal->next.coder); | |||
| } | } | |||
| End of changes. 11 change blocks. | ||||
| 8 lines changed or deleted | 58 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||