Mercurial > pidgin
comparison src/protocols/irc/dcc_send.c @ 13200:33bef17125c2
[gaim-migrate @ 15563]
This is the soon-to-be-infamous nonblocking network activity patch that I've been working on. Feel free to yell at me if this makes you unhappy.
committer: Tailor Script <tailor@pidgin.im>
| author | Daniel Atallah <daniel.atallah@gmail.com> |
|---|---|
| date | Thu, 09 Feb 2006 04:17:56 +0000 |
| parents | 8e3b85fe4a55 |
| children | 5ddde4ad1ca2 |
comparison
equal
deleted
inserted
replaced
| 13199:d8f238864c88 | 13200:33bef17125c2 |
|---|---|
| 172 GaimXfer *xfer = data; | 172 GaimXfer *xfer = data; |
| 173 struct irc_xfer_send_data *xd = xfer->data; | 173 struct irc_xfer_send_data *xd = xfer->data; |
| 174 char *buffer[16]; | 174 char *buffer[16]; |
| 175 int len; | 175 int len; |
| 176 | 176 |
| 177 if ((len = read(source, buffer, sizeof(buffer))) <= 0) { | 177 len = read(source, buffer, sizeof(buffer)); |
| 178 | |
| 179 if (len < 0 && errno == EAGAIN) | |
| 180 return; | |
| 181 else if (len < 0) { | |
| 182 /* XXX: Shouldn't this be canceling the transfer? */ | |
| 178 gaim_input_remove(xd->inpa); | 183 gaim_input_remove(xd->inpa); |
| 179 xd->inpa = 0; | 184 xd->inpa = 0; |
| 180 return; | 185 return; |
| 181 } | 186 } |
| 182 | 187 |
| 207 xd->inpa = 0; | 212 xd->inpa = 0; |
| 208 gaim_xfer_set_completed(xfer, TRUE); | 213 gaim_xfer_set_completed(xfer, TRUE); |
| 209 gaim_xfer_end(xfer); | 214 gaim_xfer_end(xfer); |
| 210 return; | 215 return; |
| 211 } | 216 } |
| 212 | |
| 213 | |
| 214 } | 217 } |
| 215 } | 218 } |
| 216 | 219 |
| 217 static gssize irc_dccsend_send_write(const guchar *buffer, size_t size, GaimXfer *xfer) | 220 static gssize irc_dccsend_send_write(const guchar *buffer, size_t size, GaimXfer *xfer) |
| 218 { | 221 { |
| 219 gssize s; | 222 gssize s; |
| 223 int ret; | |
| 220 | 224 |
| 221 s = MIN(gaim_xfer_get_bytes_remaining(xfer), size); | 225 s = MIN(gaim_xfer_get_bytes_remaining(xfer), size); |
| 222 if (!s) | 226 if (!s) |
| 223 return 0; | 227 return 0; |
| 224 | 228 |
| 225 return write(xfer->fd, buffer, s); | 229 ret = write(xfer->fd, buffer, s); |
| 230 | |
| 231 if (ret < 0 && errno == EAGAIN) | |
| 232 ret = 0; | |
| 233 | |
| 234 return ret; | |
| 226 } | 235 } |
| 227 | 236 |
| 228 static void irc_dccsend_send_connected(gpointer data, int source, GaimInputCondition cond) { | 237 static void irc_dccsend_send_connected(gpointer data, int source, GaimInputCondition cond) { |
| 229 GaimXfer *xfer = (GaimXfer *) data; | 238 GaimXfer *xfer = (GaimXfer *) data; |
| 230 struct irc_xfer_send_data *xd = xfer->data; | 239 struct irc_xfer_send_data *xd = xfer->data; |
