aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-08-28 20:03:58 +0200
committerEric Wong <normalperson@yhbt.net>2008-09-01 18:35:18 -0700
commite3293d40147f440cc520f77084a3216064a9b4dd (patch)
tree813e6bf7acca19283d1f5a47faae325527f14b2e
parentd6c92ea1348730de5ed8d31b40c92eb5b8e71944 (diff)
downloadmpd-e3293d40147f440cc520f77084a3216064a9b4dd.tar.gz
mpd-e3293d40147f440cc520f77084a3216064a9b4dd.tar.xz
mpd-e3293d40147f440cc520f77084a3216064a9b4dd.zip
client: moved code to client_write()
Move the second part of client_write_output() into a separate function.
Diffstat (limited to '')
-rw-r--r--src/client.c54
1 files changed, 28 insertions, 26 deletions
diff --git a/src/client.c b/src/client.c
index 531177ab2..d681f8b0b 100644
--- a/src/client.c
+++ b/src/client.c
@@ -741,41 +741,43 @@ static void client_defer_output(struct client *client,
*buf_r = new_sllnode(data, length);
}
-static void client_write_output(struct client *client)
+static void client_write(struct client *client,
+ const char *data, size_t length)
{
ssize_t ret;
+ assert(client->deferred_send == NULL);
+
+ if ((ret = write(client->fd, data, length)) < 0) {
+ if (errno == EAGAIN || errno == EINTR) {
+ client->deferred_send = new_sllnode(data, length);
+ } else {
+ DEBUG("client %i: problems writing\n", client->num);
+ client->expired = 1;
+ return;
+ }
+ } else if ((size_t)ret < client->send_buf_used) {
+ client->deferred_send = new_sllnode(data + ret, length - ret);
+ }
+
+ if (client->deferred_send) {
+ DEBUG("client %i: buffer created\n", client->num);
+ client->deferred_bytes =
+ client->deferred_send->size
+ + sizeof(struct sllnode);
+ }
+}
+
+static void client_write_output(struct client *client)
+{
if (client->expired || !client->send_buf_used)
return;
if (client->deferred_send != NULL)
client_defer_output(client, client->send_buf,
client->send_buf_used);
- else {
- if ((ret = write(client->fd, client->send_buf,
- client->send_buf_used)) < 0) {
- if (errno == EAGAIN || errno == EINTR) {
- client->deferred_send =
- new_sllnode(client->send_buf,
- client->send_buf_used);
- } else {
- DEBUG("client %i: problems writing\n",
- client->num);
- client->expired = 1;
- return;
- }
- } else if ((size_t)ret < client->send_buf_used) {
- client->deferred_send =
- new_sllnode(client->send_buf + ret,
- client->send_buf_used - ret);
- }
- if (client->deferred_send) {
- DEBUG("client %i: buffer created\n", client->num);
- client->deferred_bytes =
- client->deferred_send->size
- + sizeof(struct sllnode);
- }
- }
+ else
+ client_write(client, client->send_buf, client->send_buf_used);
client->send_buf_used = 0;
}