byte_buffer.c
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #include <php.h>
20 
21 // The include file must place here under <php.h> for fixing compile error.
22 // See: https://github.com/grpc/grpc/pull/12360#issuecomment-326484589
23 #include "byte_buffer.h"
24 
26 
31  return buffer;
32 }
33 
36  if (buffer == NULL || !grpc_byte_buffer_reader_init(&reader, buffer)) {
37  /* TODO(dgq): distinguish between the error cases. */
38  return NULL;
39  }
40 
41  const size_t length = grpc_byte_buffer_length(reader.buffer_out);
42  zend_string* zstr = zend_string_alloc(length, 0);
43 
44  char* buf = ZSTR_VAL(zstr);
46  while (grpc_byte_buffer_reader_next(&reader, &next) != 0) {
47  const size_t next_len = GRPC_SLICE_LENGTH(next);
48  memcpy(buf, GRPC_SLICE_START_PTR(next), next_len);
49  buf += next_len;
51  }
52 
53  *buf = '\0';
54 
55  return zstr;
56 }
grpc_slice_unref
GPRAPI void grpc_slice_unref(grpc_slice s)
Definition: slice_api.cc:32
grpc_raw_byte_buffer_create
GRPCAPI grpc_byte_buffer * grpc_raw_byte_buffer_create(grpc_slice *slices, size_t nslices)
Definition: byte_buffer.cc:34
buf
voidpf void * buf
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
grpc_byte_buffer_length
GRPCAPI size_t grpc_byte_buffer_length(grpc_byte_buffer *bb)
Definition: byte_buffer.cc:92
string_to_byte_buffer
grpc_byte_buffer * string_to_byte_buffer(char *string, size_t length)
Definition: byte_buffer.c:27
grpc_byte_buffer_reader_next
GRPCAPI int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader *reader, grpc_slice *slice)
Definition: byte_buffer_reader.cc:66
byte_buffer_reader.h
byte_buffer_to_zend_string
zend_string * byte_buffer_to_zend_string(grpc_byte_buffer *buffer)
Definition: byte_buffer.c:34
memcpy
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
slice
grpc_slice slice
Definition: src/core/lib/surface/server.cc:467
grpc_byte_buffer_reader_init
GRPCAPI int grpc_byte_buffer_reader_init(grpc_byte_buffer_reader *reader, grpc_byte_buffer *buffer)
Definition: byte_buffer_reader.cc:33
grpc_byte_buffer
Definition: grpc_types.h:43
GRPC_SLICE_START_PTR
#define GRPC_SLICE_START_PTR(slice)
Definition: include/grpc/impl/codegen/slice.h:101
grpc_slice
Definition: include/grpc/impl/codegen/slice.h:65
buffer
char buffer[1024]
Definition: libuv/docs/code/idle-compute/main.c:8
GRPC_SLICE_LENGTH
#define GRPC_SLICE_LENGTH(slice)
Definition: include/grpc/impl/codegen/slice.h:104
grpc_slice_from_copied_buffer
GPRAPI grpc_slice grpc_slice_from_copied_buffer(const char *source, size_t len)
Definition: slice/slice.cc:170
next
AllocList * next[kMaxLevel]
Definition: abseil-cpp/absl/base/internal/low_level_alloc.cc:100
length
std::size_t length
Definition: abseil-cpp/absl/time/internal/test_util.cc:57
byte_buffer.h
grpc_byte_buffer_reader
Definition: impl/codegen/byte_buffer_reader.h:30
reader
void reader(void *n)
Definition: libuv/docs/code/locks/main.c:8


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:41