On 2018-11-15 17:07, Thiago Macieira wrote:
On Thursday, 15 November 2018 05:54:22 PST Manner Róbert wrote:
Hope it is useful for someone. To be honest, I always imagined that if
everyone would use UTF-8 life would be much better, now I'm unsure

Blame Apple for deciding to use an uncommon normalisation back in the day for
HFS. The HFS stores filenames in NFD, even if you type NFC and that's what you
do in Terminal.app. But APFS doesn't convert.

Anyway, this is an open bug that needs a fix. I can't fix it because I don't
have access to any Mac with APFS (my 2011 Mac Mini is running HFS).


Hi, couldn't resist looking into this bug (my 2012 MBP has 10.14 with APFS):

The problem I think is that the encodeName(decodeName(filename)) if statement in qfilesystemiterator_unix.cpp is lossy; the incoming direntries can be either encoded as NFC (e.g. files created in Terminal) or NFD (files created via a Qt App or Finder), but the Q_OS_DARWIN-flavored QFile::encodeName() function is hardwired to use NormalizationForm_D only, that's why the NFC types of direntries get tossed out :-(

So one solution could be to check for both NFC- and NFD-flavored direntries that matches, say something like:

bool QFileSystemIterator::advance(QFileSystemEntry &fileEntry, QFileSystemMetaData &metaData)
{
    if (!dir)
        return false;

    for (;;) {
        dirEntry = QT_READDIR(dir);

        if (dirEntry) {
            // process entries with correct UTF-8 names only
QString nfc = QFile::decodeName(dirEntry->d_name); // (any NFDs are now converted to NFCs)

if ((nfc.normalized(QString::NormalizationForm_C).toUtf8() == dirEntry->d_name) || (nfc.normalized(QString::NormalizationForm_D).toUtf8() == dirEntry->d_name)) { fileEntry = QFileSystemEntry(nativePath + QByteArray(dirEntry->d_name), QFileSystemEntry::FromNativePath());
                metaData.fillFromDirEnt(*dirEntry);
                return true;
            }
        } else {
            break;
        }
    }

    lastError = errno;
    return false;
}

Note: this is written without any testing or compiling, just an idea!
Rgrds Henry

_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to