Hacker News new | ask | show | jobs
by Sahhaese 2494 days ago
This would achieve the same but is far more readable:

   while(status != SUCCESS) {
      status = syscall(...);
      // do something with status
   }
2 comments

Only if status is initialised to something other than SUCCESS.
So use a do-while instead.
And this introduces another bug: it'll run the loop body even if syscall fails the first time it's run.
I've been going with this style for things like reading files (with retries) or any sort of loop that feels awkward.

  while (1) {
    int ret = ...;
    if (ret == ...) break;
    if (ret == some_other_condition) break;
    // additional termination conditions....
    // do exactly one thing
  }
Your transformation has introduced a bug: the loop body will run once after success turns false.