|
|
|
@ -50,24 +50,18 @@ grpc_byte_buffer* grpc_rb_s_to_byte_buffer(char *string, size_t length) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
VALUE grpc_rb_byte_buffer_to_s(grpc_byte_buffer *buffer) { |
|
|
|
|
size_t length = 0; |
|
|
|
|
char *string = NULL; |
|
|
|
|
VALUE rb_string; |
|
|
|
|
size_t offset = 0; |
|
|
|
|
grpc_byte_buffer_reader reader; |
|
|
|
|
gpr_slice next; |
|
|
|
|
if (buffer == NULL) { |
|
|
|
|
return Qnil; |
|
|
|
|
} |
|
|
|
|
length = grpc_byte_buffer_length(buffer); |
|
|
|
|
string = xmalloc(length + 1); |
|
|
|
|
rb_string = rb_str_buf_new(grpc_byte_buffer_length(buffer)); |
|
|
|
|
grpc_byte_buffer_reader_init(&reader, buffer); |
|
|
|
|
while (grpc_byte_buffer_reader_next(&reader, &next) != 0) { |
|
|
|
|
memcpy(string + offset, GPR_SLICE_START_PTR(next), GPR_SLICE_LENGTH(next)); |
|
|
|
|
offset += GPR_SLICE_LENGTH(next); |
|
|
|
|
rb_str_cat(rb_string, (const char *) GPR_SLICE_START_PTR(next), |
|
|
|
|
GPR_SLICE_LENGTH(next)); |
|
|
|
|
gpr_slice_unref(next); |
|
|
|
|
} |
|
|
|
|
rb_string = rb_str_new(string, length); |
|
|
|
|
xfree(string); |
|
|
|
|
return rb_string; |
|
|
|
|
} |
|
|
|
|