diff -r 1ecea6e2fd97 -r b27c8579750b libpurple/protocols/msn/slplink.c --- a/libpurple/protocols/msn/slplink.c Fri May 11 20:06:57 2007 +0000 +++ b/libpurple/protocols/msn/slplink.c Sat May 12 13:20:04 2007 +0000 @@ -482,6 +482,8 @@ { MsnSlpCall *slpcall; MsnSlpMessage *slpmsg; + struct stat st; + PurpleXfer *xfer; slpcall = slpsession->slpcall; slpmsg = msn_slpmsg_new(slpcall->slplink); @@ -491,7 +493,12 @@ #ifdef MSN_DEBUG_SLP slpmsg->info = "SLP FILE"; #endif - msn_slpmsg_open_file(slpmsg, purple_xfer_get_local_filename(slpcall->xfer)); + xfer = (PurpleXfer *)slpcall->xfer; + purple_xfer_start(slpcall->xfer, 0, NULL, 0); + slpmsg->fp = xfer->dest_fp; + if (g_stat(purple_xfer_get_local_filename(xfer), &st) == 0) + slpmsg->size = st.st_size; + xfer->dest_fp = NULL; /* Disable double fclose() */ msn_slplink_send_slpmsg(slpcall->slplink, slpmsg); } @@ -551,9 +558,10 @@ if (xfer != NULL) { - slpmsg->fp = - g_fopen(purple_xfer_get_local_filename(slpmsg->slpcall->xfer), - "wb"); + purple_xfer_start(slpmsg->slpcall->xfer, + 0, NULL, 0); + slpmsg->fp = ((PurpleXfer *)slpmsg->slpcall->xfer)->dest_fp; + xfer->dest_fp = NULL; /* Disable double fclose() */ } } }