stat return -1 for string like "d:". But in isFile isDirectory "d:/" is changed to "d:" before transfer to stat, we should check before temporary replace last or / to NUL.
maybe change
if (slash == '\' || slash == '/')
*(fileName + len - 1) = 0;
to
if ((slash == '\' || slash == '/') && (! (len >= 2 && *(fileName + len - 2) == ':')))
*(fileName + len -1) = 0;
Thanks Zhanglong, this has been changed for the next version for both isFile() and isDir().