diff options
Diffstat (limited to 'ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c')
-rw-r--r-- | ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c | 142 |
1 files changed, 44 insertions, 98 deletions
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c index 09746efcd0..cd064e5ee8 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c +++ b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c @@ -37,106 +37,67 @@ /* * memory device output functions */ -void -mbfl_memory_device_init(mbfl_memory_device *device, size_t initsz, size_t allocsz) +void mbfl_memory_device_init(mbfl_memory_device *device, size_t initsz, size_t allocsz) { - if (device) { - device->length = 0; - device->buffer = NULL; - if (initsz > 0) { - device->buffer = emalloc(initsz); - device->length = initsz; - } - device->pos = 0; - if (allocsz > MBFL_MEMORY_DEVICE_ALLOC_SIZE) { - device->allocsz = allocsz; - } else { - device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE; - } - } + device->buffer = (initsz > 0) ? emalloc(initsz) : NULL; + device->length = initsz; + device->pos = 0; + device->allocsz = MAX(allocsz, MBFL_MEMORY_DEVICE_ALLOC_SIZE); } -void -mbfl_memory_device_realloc(mbfl_memory_device *device, size_t initsz, size_t allocsz) +void mbfl_memory_device_realloc(mbfl_memory_device *device, size_t initsz, size_t allocsz) { - if (device) { - if (initsz > device->length) { - device->buffer = erealloc(device->buffer, initsz); - device->length = initsz; - } - if (allocsz > MBFL_MEMORY_DEVICE_ALLOC_SIZE) { - device->allocsz = allocsz; - } else { - device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE; - } + if (initsz > device->length) { + device->buffer = erealloc(device->buffer, initsz); + device->length = initsz; } + device->allocsz = MAX(allocsz, MBFL_MEMORY_DEVICE_ALLOC_SIZE); } -void -mbfl_memory_device_clear(mbfl_memory_device *device) +void mbfl_memory_device_clear(mbfl_memory_device *device) { - if (device) { - if (device->buffer) { - efree(device->buffer); - } - device->buffer = NULL; - device->length = 0; - device->pos = 0; + if (device->buffer) { + efree(device->buffer); } + device->buffer = NULL; + device->length = device->pos = 0; } -void -mbfl_memory_device_reset(mbfl_memory_device *device) +void mbfl_memory_device_reset(mbfl_memory_device *device) { - if (device) { - device->pos = 0; - } + device->pos = 0; } -void -mbfl_memory_device_unput(mbfl_memory_device *device) +void mbfl_memory_device_unput(mbfl_memory_device *device) { if (device->pos > 0) { device->pos--; } } -mbfl_string * -mbfl_memory_device_result(mbfl_memory_device *device, mbfl_string *result) +mbfl_string* mbfl_memory_device_result(mbfl_memory_device *device, mbfl_string *result) { - if (device && result) { - result->len = device->pos; - mbfl_memory_device_output('\0', device); - result->val = device->buffer; - device->buffer = NULL; - device->length = 0; - device->pos= 0; - if (result->val == NULL) { - result->len = 0; - result = NULL; - } - } else { - result = NULL; - } - + result->len = device->pos; + mbfl_memory_device_output('\0', device); + result->val = device->buffer; + device->buffer = NULL; + device->length = device->pos = 0; return result; } -int -mbfl_memory_device_output(int c, void *data) +int mbfl_memory_device_output(int c, void *data) { mbfl_memory_device *device = (mbfl_memory_device *)data; if (device->pos >= device->length) { /* reallocate buffer */ - size_t newlen; if (device->length > SIZE_MAX - device->allocsz) { /* overflow */ return -1; } - newlen = device->length + device->allocsz; + size_t newlen = device->length + device->allocsz; device->buffer = erealloc(device->buffer, newlen); device->length = newlen; } @@ -145,20 +106,15 @@ mbfl_memory_device_output(int c, void *data) return c; } -int -mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc) +int mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc) { return mbfl_memory_device_strncat(device, psrc, strlen(psrc)); } -int -mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, size_t len) +int mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, size_t len) { - unsigned char *w; - if (len > device->length - device->pos) { /* reallocate buffer */ - size_t newlen; if (len > SIZE_MAX - MBFL_MEMORY_DEVICE_ALLOC_SIZE || device->length > SIZE_MAX - (len + MBFL_MEMORY_DEVICE_ALLOC_SIZE)) { @@ -166,50 +122,41 @@ mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, size_t return -1; } - newlen = device->length + len + MBFL_MEMORY_DEVICE_ALLOC_SIZE; + size_t newlen = device->length + len + MBFL_MEMORY_DEVICE_ALLOC_SIZE; device->buffer = erealloc(device->buffer, newlen); device->length = newlen; } - w = &device->buffer[device->pos]; + unsigned char *w = &device->buffer[device->pos]; memcpy(w, psrc, len); device->pos += len; return 0; } -int -mbfl_memory_device_devcat(mbfl_memory_device *dest, mbfl_memory_device *src) +int mbfl_memory_device_devcat(mbfl_memory_device *dest, mbfl_memory_device *src) { - return mbfl_memory_device_strncat(dest, (const char *) src->buffer, src->pos); + return mbfl_memory_device_strncat(dest, (const char*)src->buffer, src->pos); } -void -mbfl_wchar_device_init(mbfl_wchar_device *device) +void mbfl_wchar_device_init(mbfl_wchar_device *device) { - if (device) { - device->buffer = NULL; - device->length = 0; - device->pos= 0; - device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE; - } + device->buffer = NULL; + device->length = 0; + device->pos = 0; + device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE; } -void -mbfl_wchar_device_clear(mbfl_wchar_device *device) +void mbfl_wchar_device_clear(mbfl_wchar_device *device) { - if (device) { - if (device->buffer) { - efree(device->buffer); - } - device->buffer = NULL; - device->length = 0; - device->pos = 0; + if (device->buffer) { + efree(device->buffer); } + device->buffer = NULL; + device->length = device->pos = 0; } -int -mbfl_wchar_device_output(int c, void *data) +int mbfl_wchar_device_output(int c, void *data) { mbfl_wchar_device *device = (mbfl_wchar_device *)data; @@ -228,11 +175,10 @@ mbfl_wchar_device_output(int c, void *data) return -1; } - device->buffer = erealloc(device->buffer, newlen*sizeof(int)); + device->buffer = erealloc(device->buffer, newlen * sizeof(int)); device->length = newlen; } device->buffer[device->pos++] = c; - return c; } |