1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-07-01 03:22:48 -05:00

Make bufchain_prefix return a ptrlen.

Now that all the call sites are expecting a size_t instead of an int
length field, it's no longer particularly difficult to make it
actually return the pointer,length pair in the form of a ptrlen.

It would be nice to say that simplifies call sites because those
ptrlens can all be passed straight along to other ptrlen-consuming
functions. Actually almost none of the call sites are like that _yet_,
but this makes it possible to move them in that direction in future
(as part of my general aim to migrate ptrlen-wards as much as I can).
But also it's just nicer to keep the pointer and length together in
one variable, and not have to declare them both in advance with two
extra lines of boilerplate.
This commit is contained in:
Simon Tatham
2019-02-06 20:46:45 +00:00
parent 0cda34c6f8
commit 59f7b24b9d
27 changed files with 128 additions and 163 deletions

View File

@ -493,14 +493,13 @@ static void console_close(FILE *outfp, int infd)
static void console_prompt_text(FILE *outfp, const char *data, size_t len)
{
bufchain sanitised;
void *vdata;
bufchain_init(&sanitised);
sanitise_term_data(&sanitised, data, len);
while (bufchain_size(&sanitised) > 0) {
bufchain_prefix(&sanitised, &vdata, &len);
fwrite(vdata, 1, len, outfp);
bufchain_consume(&sanitised, len);
ptrlen sdata = bufchain_prefix(&sanitised);
fwrite(sdata.ptr, 1, sdata.len, outfp);
bufchain_consume(&sanitised, sdata.len);
}
fflush(outfp);
}

View File

@ -162,12 +162,10 @@ static int fdsocket_try_send(FdSocket *fds)
int sent = 0;
while (bufchain_size(&fds->pending_output_data) > 0) {
void *data;
size_t len;
ssize_t ret;
bufchain_prefix(&fds->pending_output_data, &data, &len);
ret = write(fds->outfd, data, len);
ptrlen data = bufchain_prefix(&fds->pending_output_data);
ret = write(fds->outfd, data.ptr, data.len);
noise_ultralight(NOISE_SOURCE_IOID, ret);
if (ret < 0 && errno != EWOULDBLOCK) {
if (!fds->pending_error) {

View File

@ -1111,7 +1111,7 @@ void try_send(NetSocket *s)
while (s->sending_oob || bufchain_size(&s->output_data) > 0) {
int nsent;
int err;
void *data;
const void *data;
size_t len;
int urgentflag;
@ -1121,7 +1121,9 @@ void try_send(NetSocket *s)
data = &s->oobdata;
} else {
urgentflag = 0;
bufchain_prefix(&s->output_data, &data, &len);
ptrlen bufdata = bufchain_prefix(&s->output_data);
data = bufdata.ptr;
len = bufdata.len;
}
nsent = send(s->s, data, len, urgentflag);
noise_ultralight(NOISE_SOURCE_IOLEN, nsent);

View File

@ -329,18 +329,17 @@ size_t try_output(bool is_stderr)
{
bufchain *chain = (is_stderr ? &stderr_data : &stdout_data);
int fd = (is_stderr ? STDERR_FILENO : STDOUT_FILENO);
void *senddata;
size_t sendlen;
ssize_t ret;
if (bufchain_size(chain) > 0) {
bool prev_nonblock = nonblock(fd);
ptrlen senddata;
do {
bufchain_prefix(chain, &senddata, &sendlen);
ret = write(fd, senddata, sendlen);
senddata = bufchain_prefix(chain);
ret = write(fd, senddata.ptr, senddata.len);
if (ret > 0)
bufchain_consume(chain, ret);
} while (ret == sendlen && bufchain_size(chain) != 0);
} while (ret == senddata.len && bufchain_size(chain) != 0);
if (!prev_nonblock)
no_nonblock(fd);
if (ret < 0 && errno != EAGAIN) {

View File

@ -25,7 +25,7 @@ printer_job *printer_start_job(char *printer)
return ret;
}
void printer_job_data(printer_job *pj, void *data, int len)
void printer_job_data(printer_job *pj, const void *data, size_t len)
{
if (!pj)
return;

View File

@ -1309,15 +1309,13 @@ static void pty_free(Backend *be)
static void pty_try_write(Pty *pty)
{
void *data;
size_t len;
ssize_t ret;
assert(pty->master_i >= 0);
while (bufchain_size(&pty->output_data) > 0) {
bufchain_prefix(&pty->output_data, &data, &len);
ret = write(pty->master_i, data, len);
ptrlen data = bufchain_prefix(&pty->output_data);
ret = write(pty->master_i, data.ptr, data.len);
if (ret < 0 && (errno == EWOULDBLOCK)) {
/*

View File

@ -422,15 +422,13 @@ static void serial_uxsel_setup(Serial *serial)
static void serial_try_write(Serial *serial)
{
void *data;
size_t len;
ssize_t ret;
assert(serial->fd >= 0);
while (bufchain_size(&serial->output_data) > 0) {
bufchain_prefix(&serial->output_data, &data, &len);
ret = write(serial->fd, data, len);
ptrlen data = bufchain_prefix(&serial->output_data);
ret = write(serial->fd, data.ptr, data.len);
if (ret < 0 && (errno == EWOULDBLOCK)) {
/*