int64_t lzbench_lzo2a_decompress(char *inbuf, size_t insize, char *outbuf, size_t outsize, size_t level, size_t, char*) { lzo_uint decomplen = 0; if (lzo2a_decompress((uint8_t*)inbuf, insize, (uint8_t*)outbuf, &decomplen, NULL) != LZO_E_OK) return 0; return decomplen; }
int64_t lzbench_lzo_decompress(char *inbuf, size_t insize, char *outbuf, size_t outsize, size_t level, size_t, size_t) { lzo_uint decomplen = 0; switch (level) { default: case 1: case 9: case 99: case 999: if (lzo1b_decompress((uint8_t*)inbuf, insize, (uint8_t*)outbuf, &decomplen, NULL) != LZO_E_OK) return 0; break; case 1001: case 1009: case 1099: case 1999: if (lzo1c_decompress((uint8_t*)inbuf, insize, (uint8_t*)outbuf, &decomplen, NULL) != LZO_E_OK) return 0; break; case 2001: case 2999: if (lzo1f_decompress((uint8_t*)inbuf, insize, (uint8_t*)outbuf, &decomplen, NULL) != LZO_E_OK) return 0; break; case 3001: case 3999: if (lzo1x_decompress((uint8_t*)inbuf, insize, (uint8_t*)outbuf, &decomplen, NULL) != LZO_E_OK) return 0; break; case 4001: case 4999: if (lzo1y_decompress((uint8_t*)inbuf, insize, (uint8_t*)outbuf, &decomplen, NULL) != LZO_E_OK) return 0; break; case 5999: if (lzo1z_decompress((uint8_t*)inbuf, insize, (uint8_t*)outbuf, &decomplen, NULL) != LZO_E_OK) return 0; break; case 6999: if (lzo2a_decompress((uint8_t*)inbuf, insize, (uint8_t*)outbuf, &decomplen, NULL) != LZO_E_OK) return 0; break; } return decomplen; }
csi_status_t csi_file_new_from_string (csi_t *ctx, csi_object_t *obj, csi_string_t *src) { csi_file_t *file; file = _csi_slab_alloc (ctx, sizeof (csi_file_t)); if (_csi_unlikely (file == NULL)) return _csi_error (CAIRO_STATUS_NO_MEMORY); file->base.type = CSI_OBJECT_TYPE_FILE; file->base.ref = 1; if (src->deflate) { uLongf len = src->deflate; csi_object_t tmp_obj; csi_string_t *tmp_str; csi_status_t status; status = csi_string_new (ctx, &tmp_obj, NULL, src->deflate); if (_csi_unlikely (status)) return status; tmp_str = tmp_obj.datum.string; switch (src->method) { case NONE: default: status = _csi_error (CAIRO_STATUS_NO_MEMORY); break; case ZLIB: #if HAVE_ZLIB if (uncompress ((Bytef *) tmp_str->string, &len, (Bytef *) src->string, src->len) != Z_OK) #endif status = _csi_error (CAIRO_STATUS_NO_MEMORY); break; case LZO: #if HAVE_LZO if (lzo2a_decompress ((lzo_bytep) src->string, src->len, (lzo_bytep) tmp_str->string, &len, NULL)) #endif status = _csi_error (CAIRO_STATUS_NO_MEMORY); break; } if (_csi_unlikely (status)) { csi_string_free (ctx, tmp_str); _csi_slab_free (ctx, file, sizeof (csi_file_t)); return status; } file->src = tmp_str; file->data = tmp_str->string; file->rem = tmp_str->len; } else { file->src = src; src->base.ref++; file->data = src->string; file->rem = src->len; } file->type = BYTES; file->bp = file->data; obj->type = CSI_OBJECT_TYPE_FILE; obj->datum.file = file; return CAIRO_STATUS_SUCCESS; }