diff options
Diffstat (limited to 'chromium/third_party/brotli/src/brotli/dec/streams.c')
-rw-r--r-- | chromium/third_party/brotli/src/brotli/dec/streams.c | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/chromium/third_party/brotli/src/brotli/dec/streams.c b/chromium/third_party/brotli/src/brotli/dec/streams.c new file mode 100644 index 00000000000..ac0f07ea9a6 --- /dev/null +++ b/chromium/third_party/brotli/src/brotli/dec/streams.c @@ -0,0 +1,117 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Functions for streaming input and output. +*/ + +#include <string.h> +#ifndef _WIN32 +#include <unistd.h> +#endif +#include "./streams.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +int BrotliMemInputFunction(void* data, uint8_t* buf, size_t count) { + BrotliMemInput* input = (BrotliMemInput*)data; + if (input->pos > input->length) { + return -1; + } + if (input->pos + count > input->length) { + count = input->length - input->pos; + } + memcpy(buf, input->buffer + input->pos, count); + input->pos += count; + return (int)count; +} + +BrotliInput BrotliInitMemInput(const uint8_t* buffer, size_t length, + BrotliMemInput* mem_input) { + BrotliInput input; + mem_input->buffer = buffer; + mem_input->length = length; + mem_input->pos = 0; + input.cb_ = &BrotliMemInputFunction; + input.data_ = mem_input; + return input; +} + +int BrotliMemOutputFunction(void* data, const uint8_t* buf, size_t count) { + BrotliMemOutput* output = (BrotliMemOutput*)data; + if (output->pos + count > output->length) { + return -1; + } + memcpy(output->buffer + output->pos, buf, count); + output->pos += count; + return (int)count; +} + +BrotliOutput BrotliInitMemOutput(uint8_t* buffer, size_t length, + BrotliMemOutput* mem_output) { + BrotliOutput output; + mem_output->buffer = buffer; + mem_output->length = length; + mem_output->pos = 0; + output.cb_ = &BrotliMemOutputFunction; + output.data_ = mem_output; + return output; +} + +int BrotliStdinInputFunction(void* data, uint8_t* buf, size_t count) { +#ifndef _WIN32 + return (int)read(STDIN_FILENO, buf, count); +#else + return -1; +#endif +} + +BrotliInput BrotliStdinInput() { + BrotliInput in; + in.cb_ = BrotliStdinInputFunction; + in.data_ = NULL; + return in; +} + +int BrotliStdoutOutputFunction(void* data, const uint8_t* buf, size_t count) { +#ifndef _WIN32 + return (int)write(STDOUT_FILENO, buf, count); +#else + return -1; +#endif +} + +BrotliOutput BrotliStdoutOutput() { + BrotliOutput out; + out.cb_ = BrotliStdoutOutputFunction; + out.data_ = NULL; + return out; +} + +int BrotliFileOutputFunction(void* data, const uint8_t* buf, size_t count) { + return (int)fwrite(buf, 1, count, (FILE*)data); +} + +BrotliOutput BrotliFileOutput(FILE* f) { + BrotliOutput out; + out.cb_ = BrotliFileOutputFunction; + out.data_ = f; + return out; +} + + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif |