FTP4DOS v1.0.1
A bug-fix and minor improvement release for the v1.0.0 feedback round in the VOGONS thread — thanks to Yoghoo, ntalaec, Grzyb and fly_indiz for the reports. Verified on real 386 hardware.
Fixed
- Downloads on systems with long filename support. They could fail with "Cannot create local file" — or, worse, report success and write a 0-byte file — on DOSBox-X, MS-DOS 7.x + DOSLFN and Windows 9x DOS. A long-named target was created through the DOS extended-open call and the handle handed to the C library, which does not accept a handle it did not open itself. The long name is now created first and all file I/O goes through its 8.3 alias.
- "550 No such file" on entries plainly visible in the pane. In directories with many long names the name buffer ran dry after a few hundred entries and the truncated 39-character prefix went out verbatim in
RETR/CWD/DELE. Name storage now lives in XMS/EMS — a 2800-entry directory keeps every name — and anything that still will not fit is marked>and refused up front instead of drawing a server-side error. - Recursive copies no longer abort at 400 entries per directory (2048 now, stepping down only as far as free conventional memory requires; a plain DOS game directory with 549 images was enough to hit the old ceiling).
- Cancelling a transfer completes in well under a second (~0.9 s on a 20 MB download) instead of freezing the progress dialog for up to 20 seconds.
- Progress, speed and ETA keep moving during a recursive copy. Small files that arrived in one go never reported their bytes, so in a tree of many small files the whole display froze on whatever the last large file had left behind. The estimate now also accounts for per-file overhead (
PASV/RETR/226round trip, open/close, listing each level) instead of extrapolating a pure byte rate, and directory copies show the total remaining time, not just the per-file one. - Real timestamps for remote files via
MLSD(RFC 3659), with automatic fallback toLIST.ls -lomits the time of day for entries older than about six months, which is why archive directories showed00:00on every row; whereLISTis still used those entries now show the year. Note thatMLSDreports UTC. - The local pane preserves the case of long file names (the Norton uppercase/lowercase convention now applies only to genuine 8.3 names), and 8.3 names on the FTP side are shown lowercase to match. Also fixed: an empty directory on an LFN system could show no
..entry.
New
- Extended memory is used automatically — no more
/EXMEM. XMS/EMS is used whenever it actually yields more entries than the 512 of the conventional list, so a machine with little free XMS silently keeps the proven path./NOEXMEMopts out entirely;/EXMEM:XMS//EXMEM:EMSstill force a backend. /LASTCON: connect straight to the last used connection on startup, with no dialog —FTP4DOS /Q /LASTCONneeds no batch file.- Transfer diagnostics:
FTP4DOS_XFERLOGinMTCP.CFGwrites one line per second during a transfer (elapsed time, bytes total, bytes in the last second, receive/idle/disk-write counts, buffer fill). Off by default, and unlike per-packet tracing it does not distort the timing it measures.
Downloads
FTP4DOS.EXE— the DOS executable.ftp4dos-mtcp-src-2025-01-10.zip— unmodified mTCP source (Michael B. Brutman, GPLv3), provided to satisfy the license; generated from the pinned submodule commitd68948fand unchanged in content since v0.9.5.
Full release history: HISTORY.md