fetch_data() は、レコードが存在すると 0、レコードが存在しないと 0 以外(たとえば -1)
を返すのだろう

レコードが存在する !(0) → 真となり、処理継続
レコードが存在しない !(-1) → 偽となり、処理終了

ぱっと見に分かりづらいから
while(!(ret_cd = fetch_data())){
  ↓
while((ret_cd = fetch_data()) == 0){
と書き換えてもいいかもしらん