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

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: 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..548b35521e57673bde553794a85efda479aa3954 100644
--- a/runtime/bin/filter.cc
+++ b/runtime/bin/filter.cc
@@ -38,7 +38,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 +66,30 @@ 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"));
+ }
+ Filter* filter = new ZLibDeflateFilter(gzip, level, windowBits, raw);
if (filter == NULL || !filter->Init()) {
delete filter;
Dart_ThrowException(DartUtils::NewInternalError(
@@ -190,6 +214,13 @@ ZLibDeflateFilter::~ZLibDeflateFilter() {
bool ZLibDeflateFilter::Init() {
+ int windowBits = windowBits_;
+ // todo(vbe) raw
+ if (raw_) {
+ windowBits *= -1;
+ } else if (gzip_) {
+ windowBits += kZLibFlagUseGZipHeader;
+ }
stream_.zalloc = Z_NULL;
stream_.zfree = Z_NULL;
stream_.opaque = Z_NULL;
@@ -197,7 +228,7 @@ bool ZLibDeflateFilter::Init() {
&stream_,
level_,
Z_DEFLATED,
- kZLibFlagWindowBits | (gzip_ ? kZLibFlagUseGZipHeader : 0),
+ windowBits,
kZlibFlagMemUsage,
Z_DEFAULT_STRATEGY);
if (result == Z_OK) {
@@ -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