Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(110)

Unified Diff: runtime/bin/filter.cc

Issue 130513003: [ZLIB] Add support for windowBits, memLevel, raw (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Add support for memLevel Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/bin/filter.cc
diff --git a/runtime/bin/filter.cc b/runtime/bin/filter.cc
index 3ea389d1549112ffe6db6d68c22fa74d54fbf319..a263dd6f0b760de58c48ab3355a58bb7a804d325 100644
--- a/runtime/bin/filter.cc
+++ b/runtime/bin/filter.cc
@@ -12,7 +12,6 @@
namespace dart {
namespace bin {
-const int kZlibFlagMemUsage = 8;
const int kZLibFlagWindowBits = 15;
const int kZLibFlagUseGZipHeader = 16;
const int kZLibFlagAcceptAnyHeader = 32;
@@ -38,7 +37,19 @@ void EndFilter(Dart_Handle filter_obj, Filter* filter) {
void FUNCTION_NAME(Filter_CreateZLibInflate)(Dart_NativeArguments args) {
Dart_Handle filter_obj = Dart_GetNativeArgument(args, 0);
- Filter* filter = new ZLibInflateFilter();
+ Dart_Handle wBits_obj = Dart_GetNativeArgument(args, 1);
+ int64_t windowBits;
+ if (Dart_IsError(Dart_IntegerToInt64(wBits_obj, &windowBits))) {
+ Dart_ThrowException(DartUtils::NewInternalError(
+ "Failed to get 'windowBits' parameter"));
+ }
+ Dart_Handle raw_obj = Dart_GetNativeArgument(args, 2);
+ bool raw;
+ if (Dart_IsError(Dart_BooleanValue(raw_obj, &raw))) {
+ Dart_ThrowException(DartUtils::NewInternalError(
+ "Failed to get 'raw' parameter"));
+ }
+ Filter* filter = new ZLibInflateFilter(windowBits, raw);
if (filter == NULL || !filter->Init()) {
delete filter;
Dart_ThrowException(DartUtils::NewInternalError(
@@ -54,18 +65,37 @@ void FUNCTION_NAME(Filter_CreateZLibInflate)(Dart_NativeArguments args) {
void FUNCTION_NAME(Filter_CreateZLibDeflate)(Dart_NativeArguments args) {
Dart_Handle filter_obj = Dart_GetNativeArgument(args, 0);
Dart_Handle gzip_obj = Dart_GetNativeArgument(args, 1);
- Dart_Handle level_obj = Dart_GetNativeArgument(args, 2);
bool gzip;
if (Dart_IsError(Dart_BooleanValue(gzip_obj, &gzip))) {
Dart_ThrowException(DartUtils::NewInternalError(
"Failed to get 'gzip' parameter"));
}
+ Dart_Handle level_obj = Dart_GetNativeArgument(args, 2);
int64_t level;
if (Dart_IsError(Dart_IntegerToInt64(level_obj, &level))) {
Dart_ThrowException(DartUtils::NewInternalError(
"Failed to get 'level' parameter"));
}
- Filter* filter = new ZLibDeflateFilter(gzip, level);
+ Dart_Handle wBits_obj = Dart_GetNativeArgument(args, 3);
+ int64_t windowBits;
+ if (Dart_IsError(Dart_IntegerToInt64(wBits_obj, &windowBits))) {
+ Dart_ThrowException(DartUtils::NewInternalError(
+ "Failed to get 'windowBits' parameter"));
+ }
+ Dart_Handle raw_obj = Dart_GetNativeArgument(args, 4);
+ bool raw;
+ if (Dart_IsError(Dart_BooleanValue(raw_obj, &raw))) {
+ Dart_ThrowException(DartUtils::NewInternalError(
+ "Failed to get 'raw' parameter"));
+ }
+ Dart_Handle mLevel_obj = Dart_GetNativeArgument(args, 5);
+ int64_t memLevel;
+ if (Dart_IsError(Dart_IntegerToInt64(mLevel_obj, &memLevel))) {
+ Dart_ThrowException(DartUtils::NewInternalError(
+ "Failed to get 'memLevel' parameter"));
+ }
+ Filter* filter = new ZLibDeflateFilter(gzip, level, windowBits, raw,
+ memLevel);
if (filter == NULL || !filter->Init()) {
delete filter;
Dart_ThrowException(DartUtils::NewInternalError(
@@ -190,16 +220,17 @@ ZLibDeflateFilter::~ZLibDeflateFilter() {
bool ZLibDeflateFilter::Init() {
+ int windowBits = windowBits_;
+ if (raw_) {
+ windowBits *= -1;
+ } else if (gzip_) {
+ windowBits += kZLibFlagUseGZipHeader;
+ }
stream_.zalloc = Z_NULL;
stream_.zfree = Z_NULL;
stream_.opaque = Z_NULL;
- int result = deflateInit2(
- &stream_,
- level_,
- Z_DEFLATED,
- kZLibFlagWindowBits | (gzip_ ? kZLibFlagUseGZipHeader : 0),
- kZlibFlagMemUsage,
- Z_DEFAULT_STRATEGY);
+ int result = deflateInit2(&stream_, level_, Z_DEFLATED, windowBits, memLevel_,
+ Z_DEFAULT_STRATEGY);
if (result == Z_OK) {
set_initialized(true);
return true;
@@ -230,16 +261,13 @@ intptr_t ZLibDeflateFilter::Processed(uint8_t* buffer,
if (processed == 0) {
delete[] current_buffer_;
current_buffer_ = NULL;
- return 0;
- } else {
- // We processed data, should be called again.
- return processed;
}
+ return processed;
}
default:
case Z_STREAM_ERROR:
- // An error occoured.
+ // An error occurred.
delete[] current_buffer_;
current_buffer_ = NULL;
return -1;
@@ -254,11 +282,14 @@ ZLibInflateFilter::~ZLibInflateFilter() {
bool ZLibInflateFilter::Init() {
+ int windowBits = raw_ ?
+ -1 * windowBits_ :
+ windowBits_ | kZLibFlagAcceptAnyHeader;
+
stream_.zalloc = Z_NULL;
stream_.zfree = Z_NULL;
stream_.opaque = Z_NULL;
- int result = inflateInit2(&stream_,
- kZLibFlagWindowBits | kZLibFlagAcceptAnyHeader);
+ int result = inflateInit2(&stream_, windowBits);
if (result == Z_OK) {
set_initialized(true);
return true;
@@ -290,11 +321,8 @@ intptr_t ZLibInflateFilter::Processed(uint8_t* buffer,
if (processed == 0) {
delete[] current_buffer_;
current_buffer_ = NULL;
- return 0;
- } else {
- // We processed data, should be called again.
- return processed;
}
+ return processed;
}
default:

Powered by Google App Engine
This is Rietveld 408576698