And this introduces another bug: it'll run the loop body even if syscall fails the first time it's run.
while (1) {
int ret = ...;
if (ret == ...) break;
if (ret == some_other_condition) break;
// additional termination conditions....
// do exactly one thing
}