| 223 static void |
223 static void |
| 224 gaim_xfer_choose_file_cancel_cb(void *user_data, const char *filename) |
224 gaim_xfer_choose_file_cancel_cb(void *user_data, const char *filename) |
| 225 { |
225 { |
| 226 GaimXfer *xfer = (GaimXfer *)user_data; |
226 GaimXfer *xfer = (GaimXfer *)user_data; |
| 227 |
227 |
| 228 gaim_xfer_set_status(xfer, GAIM_XFER_STATUS_CANCEL_LOCAL); |
228 gaim_xfer_set_status(xfer, GAIM_XFER_STATUS_CANCEL_LOCAL); |
| 229 gaim_xfer_request_denied(xfer); |
229 gaim_xfer_request_denied(xfer); |
| 230 } |
230 } |
| 231 |
231 |
| 232 static int |
232 static int |
| 233 gaim_xfer_choose_file(GaimXfer *xfer) |
233 gaim_xfer_choose_file(GaimXfer *xfer) |
| 389 gaim_xfer_unref(xfer); |
389 gaim_xfer_unref(xfer); |
| 390 return; |
390 return; |
| 391 } |
391 } |
| 392 |
392 |
| 393 if (g_stat(filename, &st) == -1) { |
393 if (g_stat(filename, &st) == -1) { |
| 394 gaim_xfer_show_file_error(xfer, filename); |
394 gaim_xfer_show_file_error(xfer, filename); |
| 395 gaim_xfer_unref(xfer); |
395 gaim_xfer_unref(xfer); |
| 396 return; |
396 return; |
| 397 } |
397 } |
| 398 |
398 |
| 399 gaim_xfer_set_local_filename(xfer, filename); |
399 gaim_xfer_set_local_filename(xfer, filename); |
| 649 |
649 |
| 650 xfer->ops.request_denied = fnc; |
650 xfer->ops.request_denied = fnc; |
| 651 } |
651 } |
| 652 |
652 |
| 653 void |
653 void |
| 654 gaim_xfer_set_read_fnc(GaimXfer *xfer, ssize_t (*fnc)(char **, GaimXfer *)) |
654 gaim_xfer_set_read_fnc(GaimXfer *xfer, ssize_t (*fnc)(guchar **, GaimXfer *)) |
| 655 { |
655 { |
| 656 g_return_if_fail(xfer != NULL); |
656 g_return_if_fail(xfer != NULL); |
| 657 |
657 |
| 658 xfer->ops.read = fnc; |
658 xfer->ops.read = fnc; |
| 659 } |
659 } |
| 660 |
660 |
| 661 void |
661 void |
| 662 gaim_xfer_set_write_fnc(GaimXfer *xfer, |
662 gaim_xfer_set_write_fnc(GaimXfer *xfer, |
| 663 ssize_t (*fnc)(const char *, size_t, GaimXfer *)) |
663 ssize_t (*fnc)(const guchar *, size_t, GaimXfer *)) |
| 664 { |
664 { |
| 665 g_return_if_fail(xfer != NULL); |
665 g_return_if_fail(xfer != NULL); |
| 666 |
666 |
| 667 xfer->ops.write = fnc; |
667 xfer->ops.write = fnc; |
| 668 } |
668 } |
| 669 |
669 |
| 670 void |
670 void |
| 671 gaim_xfer_set_ack_fnc(GaimXfer *xfer, |
671 gaim_xfer_set_ack_fnc(GaimXfer *xfer, |
| 672 void (*fnc)(GaimXfer *, const char *, size_t)) |
672 void (*fnc)(GaimXfer *, const guchar *, size_t)) |
| 673 { |
673 { |
| 674 g_return_if_fail(xfer != NULL); |
674 g_return_if_fail(xfer != NULL); |
| 675 |
675 |
| 676 xfer->ops.ack = fnc; |
676 xfer->ops.ack = fnc; |
| 677 } |
677 } |
| 707 |
707 |
| 708 xfer->ops.cancel_recv = fnc; |
708 xfer->ops.cancel_recv = fnc; |
| 709 } |
709 } |
| 710 |
710 |
| 711 ssize_t |
711 ssize_t |
| 712 gaim_xfer_read(GaimXfer *xfer, char **buffer) |
712 gaim_xfer_read(GaimXfer *xfer, guchar **buffer) |
| 713 { |
713 { |
| 714 ssize_t s, r; |
714 ssize_t s, r; |
| 715 |
715 |
| 716 g_return_val_if_fail(xfer != NULL, 0); |
716 g_return_val_if_fail(xfer != NULL, 0); |
| 717 g_return_val_if_fail(buffer != NULL, 0); |
717 g_return_val_if_fail(buffer != NULL, 0); |
| 762 static void |
762 static void |
| 763 transfer_cb(gpointer data, gint source, GaimInputCondition condition) |
763 transfer_cb(gpointer data, gint source, GaimInputCondition condition) |
| 764 { |
764 { |
| 765 GaimXferUiOps *ui_ops; |
765 GaimXferUiOps *ui_ops; |
| 766 GaimXfer *xfer = (GaimXfer *)data; |
766 GaimXfer *xfer = (GaimXfer *)data; |
| 767 char *buffer = NULL; |
767 guchar *buffer = NULL; |
| 768 ssize_t r = 0; |
768 ssize_t r = 0; |
| 769 |
769 |
| 770 if (condition & GAIM_INPUT_READ) { |
770 if (condition & GAIM_INPUT_READ) { |
| 771 r = gaim_xfer_read(xfer, &buffer); |
771 r = gaim_xfer_read(xfer, &buffer); |
| 772 if (r > 0) { |
772 if (r > 0) { |