if ((p = malloc(..)) == NULL)
  return;
if ((fp = fopen(..)) == NULL){
  free(p);
  return;
}
if (fwrite(..)) == -1){
  fclose(fp);
  free(p);
  return;
}

エラー処理が延々と長くなっていくんだけど、なんかカコイイ!記述方法って
ない? オブジェクト指向方面でなんか解法があったと思ったけど、わからん…