static int _gftpui_common_trans_file_or_dir (gftp_transfer * tdata) { gftp_file * curfle; int ret; if (g_thread_supported ()) g_static_mutex_lock (&tdata->structmutex); curfle = tdata->curfle->data; tdata->current_file_number++; if (g_thread_supported ()) g_static_mutex_unlock (&tdata->structmutex); if (curfle->transfer_action == GFTP_TRANS_ACTION_SKIP) { tdata->tot_file_trans = 0; return (0); } if ((ret = gftp_connect (tdata->fromreq)) < 0) return (ret); if ((ret = gftp_connect (tdata->toreq)) < 0) return (ret); if (S_ISDIR (curfle->st_mode)) { tdata->tot_file_trans = 0; if (curfle->startsize > 0) ret = 1; else ret = gftp_make_directory (tdata->toreq, curfle->destfile); } else { if (curfle->size == 0) { curfle->size = gftp_get_file_size (tdata->fromreq, curfle->file); if (curfle->size < 0) return ((int) curfle->size); tdata->total_bytes += curfle->size; } if (curfle->retry_transfer) { curfle->transfer_action = GFTP_TRANS_ACTION_RESUME; curfle->startsize = gftp_get_file_size (tdata->toreq, curfle->destfile); if (curfle->startsize < 0) return ((int) curfle->startsize); } tdata->tot_file_trans = gftp_transfer_file (tdata->fromreq, curfle->file, curfle->transfer_action == GFTP_TRANS_ACTION_RESUME ? curfle->startsize : 0, tdata->toreq, curfle->destfile, curfle->transfer_action == GFTP_TRANS_ACTION_RESUME ? curfle->startsize : 0); if (tdata->tot_file_trans < 0) ret = tdata->tot_file_trans; else { if (g_thread_supported ()) g_static_mutex_lock (&tdata->structmutex); tdata->curtrans = 0; tdata->curresumed = curfle->transfer_action == GFTP_TRANS_ACTION_RESUME ? curfle->startsize : 0; tdata->resumed_bytes += tdata->curresumed; if (g_thread_supported ()) g_static_mutex_unlock (&tdata->structmutex); ret = _gftpui_common_do_transfer_file (tdata, curfle); } } if (ret == 0) ret = _gftpui_common_preserve_perm_time (tdata, curfle); else { curfle->retry_transfer = 1; tdata->fromreq->logging_function (gftp_logging_error, tdata->fromreq, _("Could not download %s from %s\n"), curfle->file, tdata->fromreq->hostname); } return (ret); }
int gftpui_common_run_mkdir (gftpui_callback_data * cdata) { return (gftp_make_directory (cdata->request, cdata->input_string)); }