diff -up qt-everywhere-opensource-src-4.8.5/src/corelib/io/qfilesystemengine_unix.cpp.QTBUG-4862 qt-everywhere-opensource-src-4.8.5/src/corelib/io/qfilesystemengine_unix.cpp --- qt-everywhere-opensource-src-4.8.5/src/corelib/io/qfilesystemengine_unix.cpp.QTBUG-4862 2013-06-09 12:02:50.323221694 -0500 +++ qt-everywhere-opensource-src-4.8.5/src/corelib/io/qfilesystemengine_unix.cpp 2013-06-09 12:38:53.140804742 -0500 @@ -624,6 +624,25 @@ QString QFileSystemEngine::homePath() { QString home = QFile::decodeName(qgetenv("HOME")); if (home.isEmpty()) + { +#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD) + int size_max = sysconf(_SC_GETPW_R_SIZE_MAX); + if (size_max == -1) + size_max = 1024; + QVarLengthArray buf(size_max); +#endif + struct passwd *pw = 0; + uid_t user_id = getuid(); + pw = getpwuid(user_id); +#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD) + struct passwd entry; + getpwuid_r(user_id, &entry, buf.data(), buf.size(), &pw); +#else + pw = getpwuid(user_id); +#endif + home = QFile::decodeName(QByteArray(pw->pw_dir)); + } + if (home.isEmpty()) home = rootPath(); return QDir::cleanPath(home); }