--- Qt/4.8.3/src/network/access/qftp.cpp Tue Sep 11 03:36:52 2012 +++ Qt/4.8.3/src/network/access/qftp.cpp Thu Nov 29 23:06:07 2012 @@ -2313,16 +2313,24 @@ if (c->is_ba) { pi.dtp.setData(c->data.ba); pi.dtp.setBytesTotal(c->data.ba->size()); - } else if (c->data.dev && (c->data.dev->isOpen() || c->data.dev->open(QIODevice::ReadOnly))) { - pi.dtp.setDevice(c->data.dev); - if (c->data.dev->isSequential()) { + } else if (c->data.dev) { + if (c->data.dev->isOpen() || c->data.dev->open(QIODevice::ReadOnly)) { + pi.dtp.setDevice(c->data.dev); + if (c->data.dev->isSequential()) { + pi.dtp.setBytesTotal(0); + pi.dtp.connect(c->data.dev, SIGNAL(readyRead()), SLOT(dataReadyRead())); + pi.dtp.connect(c->data.dev, SIGNAL(readChannelFinished()), SLOT(dataReadyRead())); + } else { + pi.dtp.setBytesTotal(c->data.dev->size()); + } + } + else { + // FIXME: should mark upload as failed + pi.dtp.setData(NULL); pi.dtp.setBytesTotal(0); - pi.dtp.connect(c->data.dev, SIGNAL(readyRead()), SLOT(dataReadyRead())); - pi.dtp.connect(c->data.dev, SIGNAL(readChannelFinished()), SLOT(dataReadyRead())); - } else { - pi.dtp.setBytesTotal(c->data.dev->size()); } } + // fall-through - QFtp::MkDir, etc. } else if (c->command == QFtp::Get) { if (!c->is_ba && c->data.dev) { pi.dtp.setDevice(c->data.dev);