PARROT_CANNOT_RETURN_NULL PARROT_WARN_UNUSED_RESULT STRING * io_get_new_empty_string(PARROT_INTERP, ARGIN_NULLOK(const STR_VTABLE *encoding), INTVAL char_length, INTVAL byte_length) { ASSERT_ARGS(io_get_new_empty_string) STRING * result; /* Round up length to unit size of encoding */ if (char_length != -1 && encoding->bytes_per_unit > 1) byte_length = (byte_length + encoding->bytes_per_unit - 1) & ~(encoding->bytes_per_unit - 1); if (byte_length < PIO_STRING_BUFFER_MINSIZE) byte_length = PIO_STRING_BUFFER_MINSIZE; result = Parrot_str_new_noinit(interp, byte_length); result->encoding = encoding; result->hashval = 0; return result; }
PARROT_EXPORT PARROT_CANNOT_RETURN_NULL STRING * Parrot_io_recv_handle(PARROT_INTERP, ARGMOD(PMC *pmc), size_t len) { ASSERT_ARGS(Parrot_io_recv_handle) Parrot_Socket_attributes *io = PARROT_SOCKET(pmc); STRING *res; INTVAL received; if (Parrot_io_socket_is_closed(interp, pmc)) Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_PIO_ERROR, "Can't recv from closed socket"); /* This must stay ASCII to make Rakudo and UTF-8 work for now */ res = Parrot_str_new_noinit(interp, len); received = Parrot_io_recv(interp, io->os_handle, res->strstart, len); res->bufused = received; res->strlen = received; return res; }
=cut */ PARROT_WARN_UNUSED_RESULT PARROT_CANNOT_RETURN_NULL STRING * Parrot_io_make_string(PARROT_INTERP, ARGMOD(STRING **buf), size_t len) { ASSERT_ARGS(Parrot_io_make_string) /* * when we get a NULL string, we read a default len */ if (*buf == NULL) { *buf = Parrot_str_new_noinit(interp, len); return *buf; } else { STRING * const s = *buf; if (s->bufused < len) Parrot_gc_reallocate_string_storage(interp, s, len); return s; } } /* =item C<void Parrot_io_set_os_handle(PARROT_INTERP, PMC *filehandle, PIOHANDLE file_descriptor)>