post by tommy @ 29 六月, 2006 14:45
不過, 在我的經驗上頭, 使用原本作者放出來的執行檔, 似乎沒有碰過這個問題 (不很確定, 也許作者的版本真的不會有問題, 也許是我的 compiler 編出來的 code 有問題吧).
在 source code 中來看, 的確在我修正的地方, 以機率來看, 是應該有可能碰到同樣的問題才對. 不管如何, 反正經過修正的版本, 可以確定避免這個問題的發生才對.
diff -Nur source/SftpControlSocket.cpp source.patch/SftpControlSocket.cpp
--- source/SftpControlSocket.cpp Wed Jun 28 11:10:40 2006
+++ source.patch/SftpControlSocket.cpp Thu Jun 29 14:14:28 2006
@@ -2882,7 +2882,6 @@
int elapsed=static_cast<int>(timespan.GetTotalSeconds());
t_ffam_transferstatus *status=new t_ffam_transferstatus;
- status->bFileTransfer = TRUE;
status->timeelapsed=elapsed;
status->bytes=transferdata.transfersize-transferdata.transferleft;
if (transferdata.transfersize>0)
@@ -2902,11 +2901,13 @@
if (left < 0)
left = -1;
status->timeleft = left;
+ status->bFileTransfer=TRUE;
}
else
{
status->percent=-1;
status->timeleft=-1;
+ status->bFileTransfer=FALSE;
}
status->transferrate=(elapsed&&(transferdata.transfersize-transferdata.transferleft-transferdata.nTransferStart))?
diff -Nur source/TransferSocket.cpp source.patch/TransferSocket.cpp
--- source/TransferSocket.cpp Wed Jun 28 11:09:34 2006
+++ source.patch/TransferSocket.cpp Thu Jun 29 14:14:12 2006
@@ -943,7 +943,6 @@
int elapsed=(int)timespan.GetTotalSeconds();
t_ffam_transferstatus *status=new t_ffam_transferstatus;
- status->bFileTransfer=TRUE;
status->timeelapsed=elapsed;
status->bytes=m_transferdata.transfersize-m_transferdata.transferleft;
if (m_transferdata.transfersize>0 && !(m_nMode&CSMODE_LIST))
@@ -967,11 +966,13 @@
if (left < 0)
left = -1;
status->timeleft=left;
+ status->bFileTransfer=TRUE;
}
else
{
status->percent=-1;
status->timeleft=-1;
+ status->bFileTransfer=FALSE;
}
int count = 0;
這個 patch 應該可以解決這個問題. 可以到這兒抓這個 patch, 與使用這個 patch 加上其他之前我所做的 patch 的版本:
http://www.teatime.com.tw/~tommy/mypatch/fz2225_set_bFileTransfer_flag.patch
http://www.teatime.com.tw/~tommy/filezilla.zip
2006/07/04: 作者在今天的 CVS 中修正了這個問題, 用了一個比較正確的方式來判斷是否要把 bFileTransfer 設為 true.