Old implementation always exit loop after buffer resize without
any try to input data once again.
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;