Я бы сказал, что ваше решение может быть правильным, но это зависит. Пол Томблин опубликовал ответ, который лучше (серия трубок if) ... если его можно использовать.
Решение Павла не может быть использовано, когда в вашем цикле выполняются дорогостоящие инициализации объекта. Если созданные объекты используются на более поздних этапах, решение do while (0) лучше.
Тем не менее, именование переменных должно быть улучшено. Кроме того, зачем так часто использовать переменную escape? Вместо этого перехватывайте каждое отдельное условие ошибки и прерывайте цикл, чтобы было очевидно, что вызывает разрыв в каждой точке.
Кто-то еще предложил использовать вызовы функций. Опять же, это может быть не идеальная декомпозиция, если она добавляет ненужную сложность к вызовам функций из-за количества аргументов, которые могут быть переданы на любом данном этапе.
Другие считают, что это сложная для понимания идиома. Ну, во-первых, вы можете поместить комментарий, как предложено в верхней части цикла. Во-вторых, do-while (0) - это нормальная и распространенная идиома в макросах, которую все программисты на Си должны распознавать немедленно, поэтому я просто не покупаю это.