0e56548
diff -up qt-everywhere-opensource-src-4.8.3/src/corelib/io/qfilesystemengine_unix.cpp.QTBUG-4862 qt-everywhere-opensource-src-4.8.3/src/corelib/io/qfilesystemengine_unix.cpp
0e56548
--- qt-everywhere-opensource-src-4.8.3/src/corelib/io/qfilesystemengine_unix.cpp.QTBUG-4862	2012-09-10 20:36:50.000000000 -0500
0e56548
+++ qt-everywhere-opensource-src-4.8.3/src/corelib/io/qfilesystemengine_unix.cpp	2012-10-22 14:16:42.672111081 -0500
0e56548
@@ -611,7 +611,26 @@ bool QFileSystemEngine::setPermissions(c
0e56548
 QString QFileSystemEngine::homePath()
0e56548
 {
0e56548
     QString home = QFile::decodeName(qgetenv("HOME"));
0e56548
-    if (home.isNull())
0e56548
+    if (home.isEmpty())
0e56548
+    {
0e56548
+#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD)
0e56548
+        int size_max = sysconf(_SC_GETPW_R_SIZE_MAX);
0e56548
+        if (size_max == -1)
0e56548
+            size_max = 1024;
0e56548
+        QVarLengthArray<char, 1024> buf(size_max);
0e56548
+#endif
0e56548
+        struct passwd *pw = 0;
0e56548
+        uid_t user_id = getuid();
0e56548
+        pw = getpwuid(user_id);
0e56548
+#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD)
0e56548
+        struct passwd entry;
0e56548
+        getpwuid_r(user_id, &entry, buf.data(), buf.size(), &pw;;
0e56548
+#else
0e56548
+        pw = getpwuid(user_id);
0e56548
+#endif
0e56548
+        home = QFile::decodeName(QByteArray(pw->pw_dir));
0e56548
+    }
0e56548
+    if (home.isEmpty())
0e56548
         home = rootPath();
0e56548
     return QDir::cleanPath(home);
0e56548
 }
0e56548
diff -up qt-everywhere-opensource-src-4.8.3/src/corelib/io/qfsfileengine_unix.cpp.QTBUG-4862 qt-everywhere-opensource-src-4.8.3/src/corelib/io/qfsfileengine_unix.cpp