summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nss/nss_securitymanager.cpp12
1 files changed, 5 insertions, 7 deletions
diff --git a/src/nss/nss_securitymanager.cpp b/src/nss/nss_securitymanager.cpp
index 2a975e69..4c7eef3f 100644
--- a/src/nss/nss_securitymanager.cpp
+++ b/src/nss/nss_securitymanager.cpp
@@ -88,13 +88,11 @@ enum nss_status _nss_securitymanager_initgroups_dyn(const char *user, gid_t grou
passwd pwnambuffer;
passwd *pwnam = NULL;
- do {
- ret = TEMP_FAILURE_RETRY(getpwnam_r(user, &pwnambuffer, buffer.data(), buffer.size(), &pwnam));
- if (ret == ERANGE && buffer.size() < MEMORY_LIMIT) {
- buffer.resize(buffer.size() << 1);
- continue;
- }
- } while (0);
+ while (ERANGE == (ret = TEMP_FAILURE_RETRY(getpwnam_r(user, &pwnambuffer, buffer.data(), buffer.size(), &pwnam)))
+ && buffer.size() < MEMORY_LIMIT)
+ {
+ buffer.resize(buffer.size() << 1);
+ }
if (ret == ERANGE) {
*errnop = ENOMEM;