You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
1.3 KiB
29 lines
1.3 KiB
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<char, 1024> 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); |
|
}
|
|
|