Репозитории ALT
S: | 4.8.7-alt25 |
5.1: | 4.6.3-alt1.M51.1 |
4.1: | 4.4.3-alt1.M41.1 |
4.0: | 4.3.4-alt5.M40.1 |
3.0: | 4.0.1-alt1 |
+updates: | 4.0.1-alt2 |
+backports: | 4.2.3-alt7.1.M30 |
Группа :: Система/Библиотеки
Пакет: qt4
Главная Изменения Спек Патчи Sources Загрузить Gear Bugs and FR Repocop
Патч: 0167-fix-group-reading.diff
Скачать
Скачать
qt-bugs@ issue : none
Trolltech task ID : none yet
bugs.kde.org number : None
applied: no
author: Dirk Mueller <mueller@kde.org>
in big user environments, getgrgid_r() needs more memory than sysconf() returns.
Try a bit harder.
--- src/corelib/io/qfsfileengine_unix.cpp
+++ src/corelib/io/qfsfileengine_unix.cpp
@@ -831,9 +831,16 @@ QString QFSFileEngine::owner(FileOwner o
} else if (own == OwnerGroup) {
struct group *gr = 0;
#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD)
- buf.resize(sysconf(_SC_GETGR_R_SIZE_MAX));
- struct group entry;
- getgrgid_r(ownerId(own), &entry, buf.data(), buf.size(), &gr);
+ for (unsigned size = sysconf(_SC_GETGR_R_SIZE_MAX); size < 256000; size += size)
+ {
+ buf.resize(size);
+ struct group entry;
+ // ERANGE indicates that the buffer was too small
+ if (!getgrgid_r(ownerId(own), &entry, buf.data(), buf.size(), &gr)
+ || errno != ERANGE)
+ break;
+ }
+
#else
gr = getgrgid(ownerId(own));
#endif