33 lines
1.5 KiB
Diff
33 lines
1.5 KiB
Diff
|
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
|
||
|
--- qt-everywhere-opensource-src-4.8.3/src/corelib/io/qfilesystemengine_unix.cpp.QTBUG-4862 2012-09-10 20:36:50.000000000 -0500
|
||
|
+++ qt-everywhere-opensource-src-4.8.3/src/corelib/io/qfilesystemengine_unix.cpp 2012-10-22 14:16:42.672111081 -0500
|
||
|
@@ -611,7 +611,26 @@ bool QFileSystemEngine::setPermissions(c
|
||
|
QString QFileSystemEngine::homePath()
|
||
|
{
|
||
|
QString home = QFile::decodeName(qgetenv("HOME"));
|
||
|
- if (home.isNull())
|
||
|
+ 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);
|
||
|
}
|
||
|
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
|