diff options
author | 2015-11-04 13:14:27 -0800 | |
---|---|---|
committer | 2015-11-04 13:14:27 -0800 | |
commit | 1f6f02a6f428cc2d58f025337ed7aba0e0ae7c80 (patch) | |
tree | 1cc87cd01c813c8d628a31449aed0dd97357e647 /src/core | |
parent | 3affdddf5b6b53cda27683eb776915b7f7ea155b (diff) | |
parent | 10cb14c87e10e8f248d65511578ea78736e5c613 (diff) |
Merge branch 'master' into protosplit
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/surface/byte_buffer_reader.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/core/surface/byte_buffer_reader.c b/src/core/surface/byte_buffer_reader.c index 283db83833..9f830df68c 100644 --- a/src/core/surface/byte_buffer_reader.c +++ b/src/core/surface/byte_buffer_reader.c @@ -31,6 +31,7 @@ * */ +#include <string.h> #include <grpc/byte_buffer_reader.h> #include <grpc/compression.h> @@ -103,3 +104,21 @@ int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader *reader, } return 0; } + +gpr_slice grpc_byte_buffer_reader_readall(grpc_byte_buffer_reader *reader) { + gpr_slice in_slice; + size_t bytes_read = 0; + const size_t input_size = grpc_byte_buffer_length(reader->buffer_out); + gpr_slice out_slice = gpr_slice_malloc(input_size); + gpr_uint8 *const outbuf = GPR_SLICE_START_PTR(out_slice); /* just an alias */ + + while (grpc_byte_buffer_reader_next(reader, &in_slice) != 0) { + const size_t slice_length = GPR_SLICE_LENGTH(in_slice); + memcpy(&(outbuf[bytes_read]), GPR_SLICE_START_PTR(in_slice), slice_length); + bytes_read += slice_length; + gpr_slice_unref(in_slice); + GPR_ASSERT(bytes_read <= input_size); + } + return out_slice; +} + |