Skip to content

FTP4DOS v1.0.1

Choose a tag to compare

@Projanglez Projanglez released this 29 Jul 08:26

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/226 round 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 to LIST. ls -l omits the time of day for entries older than about six months, which is why archive directories showed 00:00 on every row; where LIST is still used those entries now show the year. Note that MLSD reports 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. /NOEXMEM opts out entirely; /EXMEM:XMS / /EXMEM:EMS still force a backend.
  • /LASTCON: connect straight to the last used connection on startup, with no dialog — FTP4DOS /Q /LASTCON needs no batch file.
  • Transfer diagnostics: FTP4DOS_XFERLOG in MTCP.CFG writes 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 commit d68948f and unchanged in content since v0.9.5.

Full release history: HISTORY.md